{"cells":[{"attachments":{},"cell_type":"markdown","metadata":{"id":"11n5gndbRzoY"},"source":["# Symbolic Mathematics in Python with `SymPy`\n"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["\n"," \n"," \n","
\n"," \"Open\n"," \n"," \n","
"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"KU702GNKZjrZ"},"source":["`SymPy` is a Python library designed for symbolic mathematics. Its goal is to serve as an alternative to systems like Mathematica, Maple, or Sage while maintaining a simple and easily extensible codebase. `SymPy` is written entirely in `Python` and does not necessitate any external libraries.\n","\n","The standard way of importing the module is:"]},{"cell_type":"code","execution_count":3,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":1686,"status":"ok","timestamp":1683272725469,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"XQEzqGEy3rsF","outputId":"91be8eef-fc4c-4b8b-e48f-a0780938aece"},"outputs":[{"name":"stdout","output_type":"stream","text":["sympy is already installed.\n"]}],"source":["package_name = \"sympy\"\n","\n","try:\n"," __import__(package_name)\n"," print(f\"{package_name} is already installed.\")\n","except ImportError:\n"," print(f\"{package_name} not found. Installing...\")\n"," %pip install {package_name}"]},{"cell_type":"code","execution_count":4,"metadata":{"id":"jBX4LryxZjrZ"},"outputs":[],"source":["import sympy as sp\n","sp.init_printing()"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":[" When you call `sp.init_printing()`, it sets up your session to be able to print `SymPy` objects in a more visually appealing and understandable way."]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"PsCpEmlXZjra"},"source":["## Using `SymPy` as a calculator"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"9BJZm_kLZjra"},"source":["The core module in the `SymPy` package includes the `Number` class, which represents atomic numbers. This class has two subclasses: the `Float` and `Rational` classes. The `Rational` class is further extended by the `Integer` class. First, let's create an Integer object from `SymPy` and perform some calculations:"]},{"cell_type":"code","execution_count":5,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1683272748428,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"2I6wrFSfZjra","outputId":"0ccc771a-e429-46e6-8eca-2ddc7a082356"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left( 3, \\ \\frac{24}{7}\\right)$"],"text/plain":["(3, 24/7)"]},"execution_count":5,"metadata":{},"output_type":"execute_result"}],"source":["u = sp.Integer(24)\n","u/8, u/7"]},{"cell_type":"code","execution_count":6,"metadata":{},"outputs":[{"data":{"text/plain":["(sympy.core.numbers.Integer, sympy.core.numbers.Rational)"]},"execution_count":6,"metadata":{},"output_type":"execute_result"}],"source":["type(u/8), type(u/7)"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"wamGJeXdZjrb"},"source":["As demonstrated, if an exact result can be obtained, `SymPy` will return it. If not, `SymPy` will provide an expression instead."]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"2sQ5UWQ9Zjrb"},"source":["The `Rational` class represents a rational number as a pair of two `Integers`: the numerator and the denominator. Thus, `Rational(1, 2)` represents 1/2, `Rational(5, 2)` represents 5/2, and so on:"]},{"cell_type":"code","execution_count":7,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":843,"status":"ok","timestamp":1683272791239,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"KOl83dIyZjrb","outputId":"d61c2db4-edab-4de2-a325-6205063cee6a"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAEAAAAAyCAYAAADsg90UAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFe0lEQVRoBd2a7XEUORCG1y4CML4MTAYGImDJAOoiwGQAdf/8z3VkwBHBHWQAIRzOAGeA2QzM82gl1XzPaPEus9tVWmmkVk/3q+4eaWaP7u7uFmN0eXn5GZ631NdjvHMYR88T9PhIeUl7NaTT8dCgYwhQ0EfqvTA+6qzRbylf0VswemkQgGj8DfU/vRLiADznlG+UwRuOybmvcfRwwQIIQzKP+kIAARdMfE39uE9ANPYD47eUJ5RzykP6B90Onp0RuvzNzc6oX3bdtBMAmM9g/kp5TPuma2KzD7439HmzWQGgnuj2Td2oW57cFwImvSsmTDLem8ycDAUBaIVnCwCYdP1T6nczN2qyetjyCWYXUw+tUQsARmVquUpt1n5e6AUXgGF4Z6oBwKBxrJtcZY4DaWDbF0zxyVDzghoADL6mfIJ5Nlkcfe6TXNgX2JdzQQaATh9husfBrX4FQb1AMs8FygBw9RdlBRB7s+NbmzD9N3q2IOjpgaoALOlJCMXhg6zc2rsx0tsXAYDo/saFz/9Dp/+igS74GgDqcEH9Kx7whwKh03U1z98YBib552r4IKrphfFfvPNjji4lJRA9OSrnM/Vc9xP/o59JPwPgQcbOYsLIzkNGsaCCCdzT+HVjI6m7h7GS9xUm+rBgDxBm7FuKV585O6do/Hvq4MIqQNvNjWf/55QpYezhyHlLk2DIhtSh04GZk8bmx5i6YojeYFyncLR7iJK3n1cB2AsPwCpdt+vFiyt/AhhpQYcASLY+EoCUtVPn0MQ5jGmob6lc8S4ynAepMvfUp0Ca0CdwUNiuB1G+L+mGrM54yU72RA9Iz28z6V4SRmu8rp+eDFPscMFPBSB5wJRJc+Ux+XmKLXmJ44KfGAIhBzC5KATgH/+gEOGC9yg2771C9nuEmhP6QmPoniEHDDH0jm3TqN6bNgbQIb2+y3uCBsvopSEQYh9hexUK6PsC3R9R55WnnU95o5avGW4FILl+ehxOnLs526+CzXyT3lPqZtITlKnJXHtX5oDvFGknHhCN/0F9Ten96LJWqf3LHLO9Se8LbeO/Skv6ShLhTdUDqoK21kZBPc5Nl7u2TUD3nYUgGP/NkryZoVHy3rd6QHKZjUIAI1Qm7c0V6rUfIXoPJYwZu7prMTm3eFJjAjIS8CEE0hZYxYsoCvIYmgBY0NYw3wX4adoPEn1kDA+N9827j/5k6/djlLiOEovjkXnBBZFRXc208r5k7ST4XYGUezp5ttyZAAg5wHvpBU82uKngrWIJ0zHO6zG6gK8kWY3JKx1PAFybAyQNWYZWwQ9GuNoPq1PoS97QzNCZ7Tcbrx5P/UGP7AFm1k2zsrICIVAQwwsL2nN9H6iu6hlCNXlAekPiQHFiwlg3Js4VWb0pyaM5L0JX3d8cFD4BHKsenSmW//S6lJxPeUdxW/ovxfdzKRRKxW2b34WSwkIHANbXCz8YpMHYVV5huIJNhL4eF+m5kQcnT4/h8V8FwO2leWAyCPD6xyjdv0kpBCbLagrY4rWemRN0BgBDTAqikk9XE5Twf0Sjf0WbIGcnLNjovkXKCToDsO4PGfwCxqmuq6t3/Z8g7SnSpiiK/+2Vp8eavjUAMFxkNKp3F9cwQYG1D6rI0MUE0L/YKWsWhC6G4xmldoRu/U0ORt3EGJn0d7couBo23mTwMMT4zgk9XagVdVXXRQsANYPJ2Pa8XUPLsX0k7HD1BaC1qLUQqBj3ira5wNU8BNKjO/843QkAhrsxuqLkx8W+ooAtbs3dqIWNT9OOTgBkYoKnNWNGAXtJ6K7rL6lrcV81phcAmeJEBcx1W1u1pdZGZzdoLt6z2kDjYhAAeRHkixIfaV07voa4eVyiq4/hD5RntAcfxT8Btw7UjKKWo7gAAAAASUVORK5CYII=","text/latex":["$\\displaystyle \\left( \\frac{1}{3}, \\ 2\\right)$"],"text/plain":["(1/3, 2)"]},"execution_count":7,"metadata":{},"output_type":"execute_result"}],"source":["a = sp.Rational(1, 3)\n","a, a*6"]},{"cell_type":"code","execution_count":8,"metadata":{},"outputs":[{"data":{"text/plain":["(sympy.core.numbers.Rational, sympy.core.numbers.Integer)"]},"execution_count":8,"metadata":{},"output_type":"execute_result"}],"source":["type(a), type(a*6)"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"iYQjOa_xZjrb"},"source":["Lastly, there is a `Float` class that can represent a floating-point number with arbitrary precision:"]},{"cell_type":"code","execution_count":9,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":37},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1683273224767,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"u3w7IyzhZjrc","outputId":"6131521b-ec8c-4671-ccfa-379fb3626f66"},"outputs":[{"name":"stdout","output_type":"stream","text":["6.53000000000000\n"]}],"source":["print(sp.Float(3.53) + sp.Float(3))"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"LOkp9u5V4Sel"},"source":["Note that this is in contrast to normal `Python` where we may get approximated results:"]},{"cell_type":"code","execution_count":10,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":2,"status":"ok","timestamp":1683272878889,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"OMeJFKbG4azL","outputId":"42cdaa45-896a-4854-87db-84f2baa2155c"},"outputs":[{"name":"stdout","output_type":"stream","text":["6.529999999999999\n"]}],"source":["print(3.53 + 3)"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"g0zqOld54oM0"},"source":["For more about the discussion of floating point math, see [here](https://0.30000000000000004.com/) or [here](https://docs.python.org/3/library/decimal.html) for more information."]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"T9porEnqZjrc"},"source":["In addition to the numerical classes, `SymPy` features constant objects, such as `pi`, `E`, `oo` (infinity) and others. `SymPy` employs [mpmath](https://mpmath.org/) in the background, enabling computations using arbitrary-precision arithmetic. Consequently, certain special constants, like $e$, $\\pi$, and $\\infty$, can also be evaluated:"]},{"cell_type":"code","execution_count":11,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":413,"status":"ok","timestamp":1683273147175,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"pYKBdYrgZjrc","outputId":"ef8c33b3-4e2d-43f7-d2bb-3194c42311ce"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left( \\pi^{2}, \\ 3.14159265358979\\right)$"],"text/plain":["⎛ 2 ⎞\n","⎝π , 3.14159265358979⎠"]},"execution_count":11,"metadata":{},"output_type":"execute_result"}],"source":["sp.pi**2, sp.pi.evalf()"]},{"cell_type":"code","execution_count":12,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":37},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1683273149543,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"hGjA2LkBZjrc","outputId":"ee6fb4b6-8a2b-47d6-cba4-c2e4cd14b42e"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle 5.85987448204884$"],"text/plain":["5.85987448204884"]},"execution_count":12,"metadata":{},"output_type":"execute_result"}],"source":["(sp.pi + sp.E).evalf()"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"__lePlW-Zjrc"},"source":["As demonstrated, the `evalf()` method can be used to evaluate an expression as a floating-point number. To evaluate results with arbitrary precision, simply pass the desired number of digits to the `evalf()` method:"]},{"cell_type":"code","execution_count":13,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":37},"executionInfo":{"elapsed":507,"status":"ok","timestamp":1683273180467,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"mf4X9AGGZjrd","outputId":"ea17cbee-fc36-4970-e227-844ef704ca73"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAABBEAAAAPCAYAAACyaFeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAXm0lEQVR4Ae1d7ZHdxBIVLgew+EUAZPBsZ2AygEcEhgyg+Mc/l8kAiICPDIAIAGcALwJgM/A7Z3ZatEYz06d1dQvselOlndGo53SfMz3Sla52942XL18u/y95BT777LN/Y3vhR2L/BvsPUP/m+/+uNuJ4G76fYPsG7du/K47IL2L7x2sZcXhdj78qOfS66h/xutb8/NPX5LV4R3rzeNb32Vpm/SucXgWbv5P36+b7GnyugXl2Xr4KMZLzqxLn2fOj4r2O+oDTP/5zcEb3V4HP65ZvquaZeYw0uu8NGAD2v8X2EO3DN50V5yPUH3l8a2f9jPDQz5vkTyruI9R/cB/9m5v7erxUke+KaXHzoQB9PEf/Dx4H7R/Rx+Pmi22Wh3fV/ifsnze9X6PPxi9oy3yqbRQn5/MLbrBvXJfdW/S/yZaIt2LA3rj8js53sFGj3cMT9NG/lQdoPEVfm1spLVXf5pQ1xlCLbk7iGOfuU9rVwv1v0b+Zc9WOGLCV9Kn+aC+tPYdrQ9sckrjUGBVbOYcqppzDRqCO684P+KbwnD5n5GUJ0WFayBvNrRN2Ya7DRtHcIBfne8RHnp+k76Nr0mLfaQT/oT42mLXjbt0eU+Ztgysmxw2vcaJGWd+SlvDNXI/O6aSR9R9pSUzapOanDLobx3h251bgybkOW+V8KfMGnqql0Vgwhvij3JB9G6DjZF0+f62v1IFtyjewlHmUMYGnailjkrQYp2xXMaM8kmNM8GaMqetUmfQ7DRjPbu2gLxOnvM7ML2vEPPK9msHG9LS+TQ5neVefozVmPhbn9+LrnoEKmPQr5TrsZM0TttJ1gnyAafMy0qfQht3ZfOS8RAASHzXGQqj5gbHdHM5gVtvoPjLD27S3ObKoN2vHOn094mM29fhs/UiaA0/mE2l5HwZcDF9h4w04b8SZdJcWklxvjgl2oZ8eHuPkzfG7xGdBm5P2C/uwrTeAaEscqx0fQtgHuQXt94D5Per3sX1HP7VQLxZOBm+eeewZbG5Rbwr6GCs5ELvEhZr73HgDvlSbDB8lzseApr/dzT36+IZCWTjwTX0UPJiVWH9BRa5FjzredC++rA925PR5HUet/ot9PqTyMWW0DH3TV6fscsjZPEc865yzH/t8iHCDzc+5ZIcxUozEhytp7cE2zKHKR4oxYSvlEPFqjFIOV/++2s1PFg/2oe6woea0C/Oy+mdcw3VLAhlMmMvzA9yQD/Dk+cn4hq20JhWNkvosCmaGd/UvrTNRo4zmgIy1rDGq52DZv6Jl9S2tCZLplN3arTZSrsO/kueElHhntKy2Sm5IvhkkMNVztWor+a5c1HnMYJ6al2qcqh01Z4G9kken84Zf+bPoXaSbn6O1I8VZkaR1tvF6tzPyTS3DHFZ5w07+nMOwYH/aPBpnBbPGqeZ6RnPVVr3mKvpQx8znejXGTF6GfJIx2nT6epfDGUzYqmtX5l0xGdf0c6Mn4dojPso1ijCh5tWXxEfR8j6MbgH6PoHR/hgVb/QOl4qxG3/UzwgPDvjAoL3x46R9iH5ORPmGHfWS8M2xH8KeDw3s5tEeRnyKY9ZH2BewKbpxJyiM52vYGxbNucD9jbTMB+PkOOFzfchCpyzo48JhbXwyeLTd3FwDh280EIvfgJg/Jj1/taM8QEB7QZua/Yymt+MhSUuMVX0Tcy0Yx7zulorJk3JbnqLjR2xFo6Sdos8CzMzaC3NIjZFEk7Y2pxxaCsa3OcT+TA7fAeEnsEbzI+NVPorumbwMNa8kJMwaY5hrxEzwoW04PxVP8l05SWsStopGkj7VLysFU+JNMHCX1llGI9iGmtN3LYqW8jmYmAn/ipbZ+TFejKO7dtFPPmG+VTtl3RafsFd0l7UEnpQbdC76pqmiOe1YJFvRd2oeRUxZS5IRMdU4VTv6ZZxSHokxZnjL1ylqZAVxdNeOOx7meuUdrjPDtDryDTslLyXe8JVZY2fP41I1UnJDmvOKJ2mesYXm4XUiwYVTfTofgiKGMC9phxLygY0UY0FrfiCO0frJYEo5TNcJ3sraadgU/C4f+JXXD0AVzYtvkU+o5b0dkws6EBQfQJAwt4tLgMdv0n+FzU3jiDfqPGGUm5zmWLT7Agab+IFzEReM55sM1OVL7xz9fFvCL8YMHzXOn7xP126fOqp4hOCDE9q3hb6egJPNB3n7hyRmz7HezvqVWvW9YiGeKCf5Joifh3Vs01Dt0jE2fna74KDmkBojfai2ag4RM5PDtF+C+cngqbpLeZnQnDQkTNipmhNT5aPOT8Y3/YcloZGqD/NBzXWVd8jDGagaXcN35hws+U9oKc+P04pzNTu3qlqqeU7XEm/YZbT0lGZtyXdCc+p3dq5n5lHik9RSxVTjVO04b2oeqTFmcihznSo5Fqwd2qhxquus+OWPyHciL9O81yDGjbPnkZ5UTHXOM5pnbMeq/HVE5cIR1+Cj5uVfEc9baowblCCHM5hqDku8E2snw2dje9KOxAe+Qi3vnxSQwXwAETevA9mBg/UMjw8L+IdIRjf5djMruwYWMdc3GDgQfbyQsfjfM7zr0X7ybYnbSZyGIvNR44SdvWlgPhb08cnbs7UDDfRleHPRbR6IVCx7YPCk4rH7j3rMV7/XnUeo6TdTQt8AaznPcoi+uZg+Rszfo+avrFg+USc/56rdkRjhalrUHFJjpDPJFnq0ei7o2+VQjV7OYcd2Nj8ZvFB3xG35puSlpDkw7TyjYEqaV21CPrD7Dv7V+cn4dtMzbYYaJfWhsxCTRgneNFeLpNE1fAOTuSldexL+Qy2BlcnfVsfZ2pW0BKCU53Ss8oadrGVLaLSv+sb4UHPnQ7JVfMMmNY8KJuOEnaylggkbKU7Y/Vx1Us6rNJXySImRYLCTecOcttnPorO1Q//XPK9PfYOLlJcHeWPYtJw6j9WTiqnOuXpuo/uM7VSYDBfaJnJYjjGRlwqXTIwt3jCHE7yJKa3dBG917ch8WsMz9lU+ipb3zwiIGHDGVzH8TddF0BEejvOJXK/w2xHG86J3MNMHDJ58yusuaO9unNHHVz14UfwXNr75wL8T0PrlzfJv6GdcH2DjTTSfTm7+cB+OH+aDsdM44asU2DFGXuzsj4jUI9tqhId++wCwHbDd468w8KEJex9sD5U9asXCWNYC+6mWqu8VEA2MCXMSNnYjxodFf2Kf2nB+/K+0ECu0g42kD7CzRc2hMEZzrPAxW19j3DCHcCyVw7Cfzo+KBztJd9hl8lLVXMaEf2l+VD5+XqyNsd35UX0bDmuMma5JmIQaAUPWp/oOMavdpoKfLu+NUbADDGl+WhjFN2wiLTewsJfO6Rw08R9qibHZ+SlxYly0dkMtgSGt240wbmfC21kVfWQtNwMnOxPfoeYONmO7Duv5Rt+heTTQHqYd8zXsZC17mGqcsPsBG12HnyFgdziPMFY6b8BuyBvHTr3ueb2tPYoT/eE6MwzWsJ+u22or5SWwUrx9HL028E6fxwsxu3MOTFnzjC01gf3wOoFjh/Wp2BfzaecNMU3Xz4xPizWL0dsCU8nhdQjsu7yrv0M5POEtrZ01ODSyfPzYXht4wxzq2bMPY6bzaONgt9Pyvh28pK4B8CJm30ZfArccxcM43qhTjOlNchRcxaFYj7HxoYA9FfdDuaDXf51YY+avV2z+qCNsbOE/wrE1LrR5w8r/VLB74mxOcGzKpx6P4jQ41nwgwq1bBDy7oN92Ae46jS95Mba2kBOL2Vk70jLjewEX5oGUk7DlGwh8AMbFR32YxzudBLtUjPChFtMqzCEhxtVnxnYdFOSQsytN+OB879Yk+uX58ZgDvIzual7KmiM+FXNB/EquZfh4edgernHRt+GRf7QmVY1kfeBTxbQ4rR7yNgOlTmpkkJFvRcuCBf9cL5lzOseN/KtaZuZnQYzS2hW0vCTPZ7x5jHEe0bKMFX5cqjldqPPThjPynZrHBnSEWcwOajnCVONU7S7Jo1GMl/C23DvtuodghnFibpRrCmOS1i18Hc3LIe8iZvzjGvOYxoRO4XkDNpLmpJywja4TaS7V/6l8mmkc5iXsIj4rlKJ55aLmMHUPea8BuEYdt1u7zoTNEe/U2oEvmU/jf7Qra94AjPgUs5mW9xqgo7v8FzW7b+qPgmHcUbxvMZZPCdc/5nckBoznH6f4HBufUn2Njf954D2PhX0+LLi1PrR548lXY9a3MdBnCcVv/1t9voHtV87GoHw95YOxYZwGBlsm6xPUjLFbMnhdgLtOe9PgKXeBuT5IQJuL2jRbHzihP9TyDjr8ab5pKOcQ/HNuGRffQKA+1IoPhNo5l+wwdlZ8jDO7cgwxpHJI5ULwjG21D3OoBL39McpheX62cOUPPh1Z46Z7mJdZzRFfiGkcsprbuE5tfNZDwJ7OT8Y3bKdrEsczeSnpk8SUea+GQiOjEeFgP9W82ky19GEBTz6nz/wD5/T5cXFKaxcxXO18Keqe0tLxmzZHvjOaZ2x9MCPf1UZaZx6P7QCzmMMmpWWAqcap2rWUevvp8yVBsryd49Oue4GWjFFdZ+G6BVbmvOHors0R79XgwsaheQx8bjChQZjrCc0X1RZ28nViwmfDhXbAPZWP+Qbu9NqX4aPEWP2GOeziC3mbbVNPc3jEG/1H1o7Mp4mxu5vR3ABGfOw4a9gMtbznDY+0Ac5vb9cb5yMYfsxRPIxjDPy1gdHrKd6N3AYen4bfYiv/8i8YyBvjtzGGi8uX9YbZdfKvuzLpHrm+tZnlI8TJ39XpxbH69I0BXu/3E22YPSUtf/MA46nZW9j4xJZ/c4BPuqjLT9hYolhaLTO+5ZxEXLTlyfsTbMyfd7FvObQ+5BHt5BgpQLL09NrkkBhjcZuxdXFmc6i7Jqvv9DkD47p4iE/WHRiZvAw1pzYqJuykXMvwoX9XhvOT8O3gds12TdIg1EjVx3kLMZ0tm0Pejd1096BGR333tNzEh3iUa0/kP9QyMz9Vo3DtilrK63YjzN1OxHszRNRyM2ayE/kONXfYGVsOG/rOzKPzP8Vs7MquqOXFcSb4HM2jYYwX8F4Qd/c6hX75c0njfxhnxVQ/v4Tr1vnN5uWQt8OMmteYx6OYJVbouzsHq5oTIGM7EIfzYPcUF3Gp8VzEp4lxmJeNnd/1fHz/2u5pzoNVy0wOh5irQW3AR3ftNnYRb2ntXMKniSfajTSP+GzwEfcmhy56iAAw3hTeoO6JtnGs7BzFwzienPm7+LwBPFwwnm8M8NvytvxcO8q36rDh78vzBm5U+HBggQ1vWFisvtvb/mwfOHDclA+OS3Fu3Sx8Wt09Cal4sDMehV+Db31rLtAeG5+08a0O3qQz+exJabFDX1ZL8+PdWx8fAmRzkg831l8zIWiNk28lENfepAjtMO6W41Esnru9u5/Wt+rjD47aDtOwe6aWQ2GMbnDG1oYNc8gMrEbc3RxGf3Z+CuQIjwdxzLQxjS0M1ta36k57bMO8dHiG6/GsbZqX/QizDpI0d/4tdvPJ2vpWPu7gbH4k38SC/3BNuhgljWiPbah59WtYVjtqa3Oje+2d8V4HCg1ZI4c19a1oSSzYHTmnc2jXP/BMQ6tp25ZVS9pji+Yns3ZDLV2MN21g2Le+Xp7TvMubB4B7VEsOV0rXt+MTap6xbQLq+jYb4mKbzqPZunqICayjWg4x6VeNU7GjTeViOeOoTfNoGCMwD/HGuFOve5XIME4cV9aZvG6dlqap19La63nDOka87bhSO99nzqPxCDHhX53zUHPHV7KF78w1N+RC/1fi46hNz8Ehn0yM4JLJYXUePRfq1V27G6O7ne56xHjLNas7Q5eydjJ8eiC9PmBKmnfGdvnQDpihlvc7gJkuCvIYjvj6hy+8EefTM/bzxm5zk+YNm3YaD9gU4B3U9u3xgrZN1OgDSON23S0PBjD+TWyzRHiEEb0b8vJtPMa+WBH/ej3edW2amxgxVuGjxlkcAZMnHWri4/JBZPDsdX8/nm17E2H46xJ1AHODfzTJ9D1DS++beFJOVl1uXCw1xLJ4mLd86PFAtauDL9VnjcE1Rphmwlg5xyEXDsjYmoM6ZpZDZkr8YQ7D6FprfKSRz401xk6jzcsRng3drFvrbOoV84DmI/9dPrP5OeBbXZOjGE2GSKNVHxuAOoU54+0ww+YBjRbRt6pl5hxc+Aj+U1p2RGrnR1q7wHmGTToXwW4UYzfPGaPAO60lcZUi+B7xMXi/JjK2Cm/z0dbtPK7HBT5pLQXM1X/TGMYp2I207OaREOMR3qde98h5Fmc9pqwzad0Czz6nj7S0afA5zBiHvHFsY2sAk3rk++g80pWKGc45+Fzrc5Z6nVC5kPepfAhopeow+zyo8gljrD4zOaxiGp0FfKQcFniP5sd82XrI8LGxUa1qvuIIfEItL3qIgAAoGLdNQf+f6OCN4npjvzEY7GTxYM+LDm8Y7eRnyEyI9m8Q2LFZzRtbf4NrtpwcFuP6Zccnj/Nba7PhPgtfj2kfsrD/Ibbbypn7C9oqHzXOgosfFn/vwQdtMnjkwqerbSEf/t4MsciFc/AVtrdc3w32qRFtrWS0VHzLOcm46sYHXra4LS7WjLfkg2JXByoxVlO5knJIjbHakfuUdxNdlEPFHJjTHMZx6tyukQX93XNGhOdilHQHnpqXkub0r2DCRsq1LB9nP5yfA77VNSlppOjjeEiYzn7I29mEzQMaEVPxrWqZOQcbn8i/pKU6P7DLnluV84u0bo1wrSPeR7RsXAx3I9+S5hU9Y8shU9/qPDbMppiwPaLlFFONU7WrfLJ5NI0xyxuxnnrdc3M0jBM+pWsK7FLXXPiW8zLi7XiozbPnkX5VzDDXVc3pNGMLc/U6oXJhCKfyIaArw7ysNiqfMEbiQUv52gNzCbPGSezp2jW7Wke8pbWT5NOEMNxVNfcAEZ9Qy3seDW171fxB00+hb7C9xFaeTLTHm/0b7HMblaGfwYAdHuLgkxwuKMb1hd/Qx9f5SL5XZr75MOJ7Pwg472Gf/j1m8dfY8d+OsGwenGA8v83mjeh644028f6DrfzhINQL+jJ81DgJzUJ/LCNNZDzEyYczf6CmLqWgveODA+TTPrTgfFFH/0ZERkvVd4mr+cEYTQd/iPO1+3sXiJGvNvH1IHu4INnB/miMw7wEppRDiFeKsZLP2HKIaXdbx+8qxJnJ4Xb8bn4yeAndpbxMaE4eEibsZM0TfEzHaH5k3wCU1mRCI1WfJYGp8jY7q4frDAYZjYgXaU4bSUvYyedggtYy9Z/QUp4fc9zUu7WL45KWiPHI+XLKG76PaElKs9zgcZap74TmS8b2zvXcN2yOzOOUDzCPaBlhqnGqdtQym0dRjDJv+GacRz6LcloZh8XC/bbYsdv2QN2X1tlgbNe3mpcHeU/X2BXmcUlgqnOe0Vy1la4TCS6c8mvwsVSK8lLik4jR/LZ1L4dV3syN7Nqd8gae+lm95WH7PT52jPVs/aiae7wpHxiGWr7x8uVLCskTIAu/JSYob/J488SbKJ6cS0H7VzR4Q8w/xLAr6OdTGE4KcVgo6E/oL/8tAbXkp4zEjxkejjEW+uoVfiP+0B/AvuQbdoydC98KfTxH/+bbU+yznwKz8KELb5j5e/+37GgL+vkQwSaM9s/Qt95Mo53lI8XJOIDNWPnw5ynanJNdQX8GjzzIh1x/x/YY24YP9unXHpwYb96sb3SsdrKWGC/5Ji4L7Kc5WW34JPJTbJxDK7tYgaXayTECU8pLBgXbaQ5VGynGA7ZKDqVyuMYwnB/wTeHBXtK96kj307ys8YWaO7sQE74z8yPxqf6V+cn4zqzJUKOM5k5Pm58H6NudX1Te1U5aZ8n5CTV3MYbXCviWz8EOd3per3anz0/FHa7delzKN/CW81zlndEStlJuqL6rXag57VjgX7KFXZhvFYuwtnZ21zEetCJinp6XapyqHfnAVs4j2CpaSryBlbpO1Vinayc5P9I6c5iq72leZnjDNrPGTp3HqreEiTjVOZc1B6ZkCzvpmgs7iUvlfTqfiqusH5WPFKPlb/U/zeHEPKbWbp2jU665ST7S+lFzyHwrfCIt/wczR/gNXoCHpAAAAABJRU5ErkJggg==","text/latex":["$\\displaystyle 1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573$"],"text/plain":["1.4142135623730950488016887242096980785696718753769480731766797379907324784621\n","07038850387534327641573"]},"execution_count":13,"metadata":{},"output_type":"execute_result"}],"source":["sqrt2 = sp.sqrt(2).evalf(100)\n","sqrt2"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"2F2fj3CQZjrd"},"source":["As we have mentioned, there is also a object representing mathematical infinity called `oo`:"]},{"cell_type":"code","execution_count":14,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":37},"executionInfo":{"elapsed":419,"status":"ok","timestamp":1683273404123,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"IuEzHbXhZjrd","outputId":"632ca21c-8662-428e-bb66-835e5c81dd34"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAACoAAAAOCAYAAABZ/o57AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB0UlEQVRIDb2W7U0CQRCGD0IBqB1oBxAqEDuA2IF0oH/5Z6ADtAKFDqAEpAOxA0MH+Dzn7uVyhFNAb5JhZudj592vOWrb7TYZDodvSZI04Q38GWQLKWlbw/rPg1yTc4NeGTVCJUH1KT6LldHv0UfwAP0pZ++hP8dxVbIOCHdqlgdZVjzELcti/sNXZ1KPc37g5KuwwAPTjg8XqDvqHTyE3gl2gZVRg51ZHVHNhU3JvUQ+wo47cBfuwy7ee6x/QZy2BHmHGMBpHuOx9kiMtT/AbsQF3MRmfFL351Ai2eLtkHcV5ATpo+zi82rot4MIOiVsPsprOLN9e9JFmGv3GRE3hlPASG3HATUxkEAE5mN0V8+QWYdgvHOl8G9CblFMMbyGeVIfujveQvZieyom/XZs0QxMCYjS+chzNz32dPcKwV7NzqlAndNdPZUEKbUB7T3Ok1dq+RdA9x1lvthPejyVOUCzj04+qZ4fVKEDJO5eVg6bx+uCbzNjTsHfPRVok/nkfeSHpAjMFiYo20+e7AY+TP0ZMfYzvq75pyRSCLLn2cxNEISTLmDv4oQYW48++5vf/eh/wb5zbNi8Y5K90dhX+AOWlvizPzfoLsq2JMVeas31Fx2vogF49TMKAAAAAElFTkSuQmCC","text/latex":["$\\displaystyle \\text{True}$"],"text/plain":["True"]},"execution_count":14,"metadata":{},"output_type":"execute_result"}],"source":["sp.oo > 99999"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["Finally, we also have other common functions like `sin`, `cos`, `tan`, `exp`, `log`, etc. in `SymPy`:"]},{"cell_type":"code","execution_count":15,"metadata":{},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAEsAAAAVCAYAAAAOyhNtAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACkklEQVRYCeWY7VECMRCG0bGAUzs4O/CjAqUDpAOhA/0J/xztQC0BOlArcKQD6ECkA3yfmNzEEBjhIKPHzuR2s9m7zb63t5ekNp1Oa37rdDq5399WOYbDbs2jbrd7re6xp9pmMbd4FBjskDmQBhpiZ+I3RhFcpAfEntqJ5EkwvNZuCl/ycWcn/SF+pHYn3cgPRH2SZyL+iN6ApU4m+VX8BKUjq39Sf6x2qgZg+9KvHazEvt4Vx6189sVr1je6uuQQMPTn0k/2MBaB8oORvAsG6l6ikrzRTzSVL/lpKZxM3ABlYyN76INBHZ1H6MCn7WpWU8Ym1Tyjqoq8/EEkuDfpLoQDX1lBFhfwyXZ1oVb9SL3CsprChcKirITkMGA8JMaaZBZp9xKOVrEfZs2cGA8ievCpAxaFexgxqKLKAbHoB/XjM7QggE8OWAzG0tLabR07jEQMPgYs0F6EdOTef6talBQu61h3hUTNysisrSHVLJcUsU/N6Vyh93ExCQVYoO0MfYOqyhTrPBKcy6zYzw58xoAFkrGbI8+br/rln2b+A5YYKemLLRs/tZDYvQy87PPHAXIEWAO1M39kjuwKn3sDhZmd/Kc4W4N10MZ8aY4svsfirC8N2fk31bmyqpAZIHd0FHGskZ5uYDM5Q9LzJiAWa6Qj4JKNzxorVv2S3fJj5Y12Kl/yQxxsYSZqFHSShb0isc2Qja1tzrIE2BDQyp5d6RkNtazsc35zfypf8pOrDZkTnyFkNorfYqkrRzy8rRSUyhdHVuDzDZYC5HPisGvlQq97Se3YGgU/a6VUviwe4GLKjcssgmE3PnNMs0SULT30fgn7MqapfIFH2020OClFYZFsJAzazePPcWHA+V1fvFikfgG485snR7cZfAAAAABJRU5ErkJggg==","text/latex":["$\\displaystyle \\left( 1, \\ 1, \\ 0\\right)$"],"text/plain":["(1, 1, 0)"]},"execution_count":15,"metadata":{},"output_type":"execute_result"}],"source":["sp.sin(sp.pi/2), sp.exp(0), sp.log(1)"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"wxjJYZxcZjrd"},"source":["## Defining symbols and perform symbolic operations"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"LpiUuxfYZjrd"},"source":["***Symbols*** serve as the foundation of symbolic math. When we write the statement $x + x + 1$, Python evaluates it, resulting in a numerical value. But what if we want the result in terms of the symbol $x$? `SymPy` enables us to write programs where we can express and evaluate mathematical expressions using such symbols. First, we import the `Symbol` class from `SymPy` and create an object of this class, passing `'x'` as a parameter:"]},{"cell_type":"code","execution_count":16,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":39},"executionInfo":{"elapsed":396,"status":"ok","timestamp":1683273468477,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"mE3PRZ4zZjrd","outputId":"996f2de1-32da-4eaa-a0e0-86a477e597e9"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAADgAAAAQCAYAAABDebxFAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACFElEQVRIDdWX0U0CQRCGD0MBBDvADkQ6wA5EK1BKIL7xZrADtAIDHUAHCB1ICYQO8PuOu81xHIkx4OGfzO04O7c7/87OHFY2m03U7/cbURT1EHGDrJAe9oWG/wLivSbWEdJEXxt3NSE3ZLzVINAHDHNtyDQ2numD+GqE9o6YFJNjsgIu0CTTDRYUXjKbnoCncXKwXxt5+s1GvLdGOogcPvJrSLCNfOHgSWRh5mrYd04k63BE3b3z+x9leQlKZAkRM1aEk2xctNEpbNZg58DCFmzEfGg06JJNr1IL/RExww+ImOEz3qrn8TSDeyBIyRl42llTnwFzrwqGGWJxWz/6Sd56PitUD0RjcxknRGIXdDOXJeCVvkPMoqgj2fnYWPZjjyBEhgRlTeav7ie2ZSbgJvoCm0SjAv+M61bFx7Vtanl4OK6x080TJ/fIx5J//+DfOwRZyCzVGcM3MX0TW6jFxHbP+JLO/2RkjSICEXZvQoPRq39UhBpMNrliDKeF7qbW4g6wmQVrLjQUbH5StJ0V4gwSmE2lxZhvKp7sWxK4dWmT8bNiJvzAZq/sc8H7uJWLKkGZIYOfolsjWdgh7ZoSNWv+PjVL/iwKwOacXbVsXCYBWNNxbzCDE0SS6fcNNSCtO7P2hkgkglAXmSAeyBxZoYfrqs9fgr1NkIjjYxxh83ZNKv43UTYI5vRNpmSSXqf4Sh07jm/F07z6FCl2SAAAAABJRU5ErkJggg==","text/latex":["$\\displaystyle 2 x + 1$"],"text/plain":["2⋅x + 1"]},"execution_count":16,"metadata":{},"output_type":"execute_result"}],"source":["x = sp.Symbol('x') # the symbol you create has to be specified as a string\n","x + x + 1"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"bmgPRAz5Zjrd"},"source":["After defining symbols, you can perform basic mathematical operations on them using the same operators you're already familiar with:"]},{"cell_type":"code","execution_count":17,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":39},"executionInfo":{"elapsed":1296,"status":"ok","timestamp":1683273488586,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"cU996mA0Zjre","outputId":"8768dd66-8b36-4b2e-f491-56b0290e601e"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left(x + 3\\right) \\left(x + \\frac{y}{3}\\right)$"],"text/plain":[" ⎛ y⎞\n","(x + 3)⋅⎜x + ─⎟\n"," ⎝ 3⎠"]},"execution_count":17,"metadata":{},"output_type":"execute_result"}],"source":["x,y = sp.symbols('x,y') # you can create multiple symbols at once using multiple assignment\n","p = (x + 3)*(y/3+x)\n","p"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["Note that `symbols()` is a function while `Symbol` is a class!"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"ctmpZHPwZjre"},"source":["You might have anticipated that `SymPy` would multiply everything out. However, `SymPy` only automatically simplifies the most elementary expressions and requires the programmer to explicitly request further simplification. To expand an expression, utilize the `expand()` function:"]},{"cell_type":"code","execution_count":18,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":39},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1683273531522,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"yhWoqNSrZjre","outputId":"2676f9bf-17e6-49a9-8b6c-a36bcbe87410"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAJ4AAAAlCAYAAACziFDNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAF1klEQVR4Ae2a23HVMBCGTzIpIKSE0AGXDg4dcKmApAOYvOWNgQ4SKmCgA+iAQAl0QEgH4f+M1qwdT04sS7ZzrJ2RJcuWtDetVtLuXF9fr7YFTk9P90XLUaDnqfLXSodKr0Ldd/3zhbL796Fef+j9PPxj3z6q7oXVlTwtB3bTdjd5b++lLB9IwuS70keltd7fKkcp3ysZnIT/vqrC1/P9pdJzCgXycGAvT7fj9yolwtJ5BbrSO8qD1QMOlKrv+veRyigm8Ezpsir9f1D37f9rKaXmwNYonhhzIYX65Rj0WOWfqkMBV8r9svlL7z/Dv1i3d6Fs2bqjzr6VPAEHohRPQmPZOgnj40MBr1VfCfnf67hPp0g2cJdCVd8MT+UoGLR4/w5rSF2xeGJCLohSPCGDL3VsSKl8pvIPJRz1ycEpVLWRACHVoUzkfnJgBWuryHcBynil/8wiVpXlkZYDsZuLIwkGARngOx2qDmsxOmjcfaWvDicmBcrjl142E17pwBNr7f+hrvh3cCEzxCoegr3IjFuf7pkEpEspF5atsVkICmmbCd9vQ+nCf/TDTrdARg7sxfQtAdU+UWiPInqHPabbIW3wx8AJpVkJv2MlLKC5AChkvezyTwCOWTivw2L/VjJXofh3gUG5sp2hB8gSGsvrZ6XHKreXslx4Z+k3KOBaOTviSUE44AaYH40V5x3feismRZTFM4kE5mAt7p3SCXfwrpVM7wiXs0A791NxGgi4vFVuirdSmTNJrPgLpS7rPQ2ykaPG+ngwghkIc54p4cizuaCuN6gdCmBXXb3bRzZAkJ9cW245zoVHEqEOpAlesIHztydm6ewYy6GevjgQ/40IRVk8IYWC4T+heLaTZXbiM8UA1oY0JoDrgfB/oxzf7kxlE24KPIbQxFHOVUgVLsKNyV2VR3oMwX8jilGKp145swMx8hrEmHppqCtnWhCuSSxbDvKEGxPgge9bdWb9mPD3HmrFE2Eoki13myI7Gky591yYOQGSzVoo4pOyW2+cKPSR2xhkOnxujfrZdcj0iexwzUoxFwckxEdKuAKsJCy/Fx1jzU1ud4r6qSyeiMPSMaMM8C8w7bbDO1DZf7f/Sp6RA5ILykZaqYw8iBusd7Uqz0puwgd/3w7quQG6VPJQ3wrZUtsnssN31KssxPBPWDbagGKv9L3LR+Qu1UeWtNvSLls0q/reuTGgq9D3LDS5IaqixvmihEH4rPxBKA+Wm/pJib+/ROgK0kD27yDILF41q6gI0NXIvkXnIrJLsVaqZzZzHEMAZ29Qu1uVo3eHPRpo7OQ0qc/qpEB5Wy4stQiPhCK2v/eWW0r81RcTY6Uc/Ngz1P6o6qCJuurkwPt4qms0qnd9asQlPI0KjMMBTgtYVu/Mc/1rwp6D3DZG/ewF4rjysusYZnBXZEfsGd04otquUa5EzjfJhtzDk/DCN5RyrnLjnLcRgKH32r+DBiyeme6+kR20L5CHA0zyRoSMFA13BGXjSAWFnLPcGkonfA3XmqY9EcCaGxPZoWYFcnBAguLqbq3kD4uxIlxP2u3KnOXGxLk16mdwdEoKxouZgzYXm3BQ/wjNNgFYDd7NtdjUPOp7bpqikOrRKCX+6oujOCZSHfWDxZsDsHSQkoOIRdGmiPTIRlNyJnV3GIV/W8kC/zlvtDPharRZKJ6Qs+WjmwXDaiH6SGMQUmQ7PhvvRN+sbtgordaZaWqNlv51AP6sXt5F6Iz6mYXipWdbo0fOuhqzV0wdO9KjgdCWv9wp6mcWPt7YgpDiMSs5irhx6T42Lksdb3dphEvp1qK5M9JjabyYkt4lLLUVf6VwXNmgdIR8sfxeKBWYiANLX2rrSI+J+L/YYRepeEhbFvCPMo5aLNKD6gIjcWDrfTyW2LDMtllqSy3Lb4GRObD1iid+9o70GFkGixxuCZsLzvBujfRYpOQnJnoJincjnEtLbzvSY2IxLG/4RWwupGj4cT58/lDvWYMElqdK/Sj+C5iKkC/npd46AAAAAElFTkSuQmCC","text/latex":["$\\displaystyle x^{2} + \\frac{x y}{3} + 3 x + y$"],"text/plain":[" 2 x⋅y \n","x + ─── + 3⋅x + y\n"," 3 "]},"execution_count":18,"metadata":{},"output_type":"execute_result"}],"source":["p2 = sp.expand(p)\n","p2"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"PWIz65wxZjre"},"source":["You can also factor expressions using the `factor()` function:"]},{"cell_type":"code","execution_count":19,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":39},"executionInfo":{"elapsed":1017,"status":"ok","timestamp":1683273541157,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"qxjS1J9BZjre","outputId":"264295ab-d51b-4160-975f-8d9853dfb1df"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAI4AAAAsCAYAAACzKYDtAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAGVElEQVR4Ae2b4XXUOBDHzb0UEChhr4McqeBCBwEquNBB7uVT8o2X6wCogBc6CFQAoYPQwXHpIPf/Gck38kqyvFn2vGvNe1rJM7JG89dIGnnt5v7+voml8/PzRYy/jbx12LKONrYNu5zNvzQRuri4OBX7ICLaVtbC2bRS/3cQj1Ickrg9YhZYEkjHuj5U/qflT7Wsfi7Ut1euf/vKub4U/6PjtZmumQx3yt9a/lBZ9aN4iF+kd6j9qctTuAWOo0oA/0n5b1M3iP65/uIk3nHgMdBXSs9V/kA9T7q+Ufl35Xeel8tVL4qH4xfrzenYBlkMt/5WdSlD3mzSGHXqSOlkRZ3cd6L7cRZPfqU58wyTYxs2llIKj7F6S/UV13sgbsV6XMUl3PqO80IdGrWUj+1BpD6zmrQKfdVNrB6kltT/rux5Pne2YWOpvhQeo/R6/WvOsaHUjgepjuG251uUkFn7zV9vQ64+s7o8tn11dsBKrZzY+EIpO0FyeKyolz5tMwW4dY4ji54p+WU+aqAAw8P9tnKo8h9KBIkvlaDPqhPEFT/Ym/mV7iNpYnt5pXLKMbARW1NyiVoaxMNXzOmVbFKYmf78qv7fWJyc7J3y5942kwe42a3qqSrdmoqxIgHhXyQJPyu9UyJG4QQGQGPiB1VfD0n/gRKnJoJktpEvmZaxEWcfokE8CvVODbMz9Zvxu1bqjxcrsY0XLUYBbnbFYeC/25q2LGWsNFbRna5RwqoDPVGy8pa5iR/1DWchNSrTJ2bS0qkKuQgbSxwniwcNSUdWr+STwkz94dkcEx5iRQULS7lVNsDNOg4DjzOk6IsU2xiII/tX8dp7lMeWt64tyYk52Er6hN5G8u5IbSrQfrZdU7ctqv4HJfp0pfyxK9tq2IBTDNEQHsH9Cb0PwgwFaneduH1Tezg7xOryui3998P49HleGuBmHcdXiOZGoZfHFHvZUq77Y47RiM8KwRNKls9RpHuYQbThwfD3s1UBAqkfc41yCN+gzUv1Rvo1CjN0qo214aa2/CQHFyZPF+dJBpbwUnFugJuNcViKSmYixnjF3aCIt09SG5skHuixLY3RS11sHaIcHqP1Tggz7GYV73YLBwRjypP1/iR04tY3Otz2PFc5S1F073cDw9NYAj08klmAErt1EXRt+m+KO/Xjo/SSW3rqLmKzh5lj+23vs+UkHqo0qFd9wkGniBk2Ms59DHLxDfcEuNkVB087pEaE8EbSdwdI53nUFQ+ZD7pgbYpwVE4HHakvbH0MGkfyvkNRr43NKAxQDo8SvVPFDLMDp3HjR38DLHv4BLjtGeF7lZkhMWLmsh/SeCNFDMq1EoEbyzYO1W1b1NkESedbpSPXD6+S2fRMvNhqQx1siMYNCA0l8SjUO0nMnH04Ps9rOAX/rcQzHSiFGbIQN/uOiN6/uFU6sLyfXZa+Y6XTn62H9qVnoXRbqou6ShvFY0Tf1oabbLxUuknplmwJN7tV4VV4YMlspO66iO0ktqWsq33bDjMNG0vp/8CjtG8r4cYqo8Qu0ZLK+yrwvOn1D070dxm3vpfJu67xsD5/26/drLkea8eu4SF7WEW7FV7lK6XLFC6Ssdos4WZjHO9qHNWIdYiyd4mIx1ZZTXcND1aPJ1ppTpUT27xRORfbRHELXuRSIy2pIQLMY+WjH8q5JiaVOZB4ohycJko7uWt4jLAb54riFnWc0oZrvfki0A+O54tEtXwUAtVxRsFVK3sEHiliDj9z8JKaVwQyCNQYJwNOFaURqFtVGpsqySBQHScDThWlEaiOk8amSjIIVMfJgFNFaQRifzmka89A4p4S+78m+ANwoeRfYJsBAmUm1lOVwUlOg6PgJN5xGpV5MYz/7lJfTZgW5lOsW1U41rxecOKcxUv8H4BnnlHzpqmOE3oBr4sG77nIibiu1EOgxjgGEDkJq8vYb9FNC/Mp1hUnM9ZyJN6zbd8CVLn7Bilzy2xEdcWJDLWchI/TcBq++mD74gO/SgaBeqoyYMSKcqJ6qooAUx0nAkqfJef5RzyO6rFv0fvVZ3FdYxwzzGxRbpsy3Lbotyq2r0pCoDpO6AajvwkPb5/PVQ2Ow7Hmmc3Yb9HDFmZyVR0nHGg+HQnIBcfEN6lv0YP6c7mowXFvpOUoxDF8S+VpoUL9k9Oj4fJ/AdqZUspCbuAuAAAAAElFTkSuQmCC","text/latex":["$\\displaystyle \\frac{\\left(x + 3\\right) \\left(3 x + y\\right)}{3}$"],"text/plain":["(x + 3)⋅(3⋅x + y)\n","─────────────────\n"," 3 "]},"execution_count":19,"metadata":{},"output_type":"execute_result"}],"source":["sp.factor(p2)"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"7yAsZ5I9Zjre"},"source":["The terms are organized in the order of `x` powers, from highest to lowest. If you prefer the expression in the reverse order, with the highest power of `x` appearing last, you can achieve that using the `init_printing()` function, as shown below:"]},{"cell_type":"code","execution_count":20,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":39},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1683113848317,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"HVYyNenlZjre","outputId":"6e53db53-24e3-4140-f7ac-007cc10e9be0"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAJ0AAAAlCAYAAABYv+vOAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFn0lEQVR4Ae2a7VXVQBCGA+cWgJSgHYB2gB2IVqB0IId//PNoB0oJ2oF0IFqCHYh0gO8TduIEwjW52U2yuHPO3v3M7uzkvTOzm9m6vr6uCqWTwOnp6Y5mfxNWeKb8tdJjpVeh7ZvGfKHsxj5R9bvqn8IY6ztT26G15Zpv58p4Rny/F1A+kMTzN6UzpQPVj5UDyPdKRidh3Fc1+Hb6Xyq9oJA7rXLfwJL5F4DQcB48V6oDHLQdtKtU92vsnsqAEnqudFmX/v7Qdv63mm+pgC7tu7sQmH66JfZV/qE2wFcp96byp+o/wli02rtQtuygo836ssoL6BK+LgciW6ULTHWfxhoQARdm1/tzaEHastF02g/8nihB+LDQa/ZZQHcjjOS/EraBqT40sGB4MeQ14AITaL9GG4Y2nr3SONOEoXnRGb7skXGo8keVvys9KQcJk0rkXELeUfqqBGAgXgDA8eaWg4MHHOPQCn4MbTn6c2/c3tkDvutjte0V0CGONATYSJcSNKamdTAIL8QODp6DFuDCOObhRJsT8Se76GJ41dVY2qJIAP8LvwzAVALPkRKaz8wMYGxMLWMCcZXCfRya4ZcSd3ZQNv4czIr/xielLgKE9WFpa6mXw2IaM2M+AZqCOn5CVsIXz6NI+wV8B8o5+WZJ4p2D0GelfZWXeZAQY4DsWLmBrlKZ+y00xaFSl4ZQd96kfbUApjpy4K7P7vWy26D2UCsLMV4Djg0kNa9aENOC83hb1bL2OkLQOKKAzABmGo5juLWtm2NU3wjex6zLHwvza8TXi09OBta+UT71nrQegEN5cBCqQj0t6LQO/1TSUOJq4Cqk+lkxzMmvLk/0synvY9jDn9vVPt8qx5f7qLL92cbMa89OtifxDeD4AwE6zCuE5TpOqunqZTb4CYJ+5B9Vm3139JrAD8m+rD0m1+ATCok7OUBO3pD2eFSDTgU6MWmLjG4Qf5hp/B1OgC1T7XhXd7U2ioMBhTaXwBBZa2xLafhVt0NlkdENYnxPCVODWsbkXgR+fTYkisM/V8rDJRBF1iterNa2S0ocvtYlpuqz3YaLN4BGqlTGvBJj1pxeVe4dxcEchTaXQExZY15HRzeIIfwsTOBt2qVB/c3VhxvA90UfZeG67hY19ovSlXo+K38UykOiOO5OqhbNk4R3zZssOlZzb3VuJjQm2tNoWRvPaDpeZKUc0ODbNT6T2tCCtK09QWlcF6iYE+3ElQkBjL1J4+vTjvJay7kHMa/wSQKEt/vvjeJwc7SKmiMq7za55l0LDBuXIk+xpxiytr2aT0d9SdENnHgwpQC+F2ms/WmaEyDPD5mj10JlUDVW1isnQ+5VWh+bVZ/Ln0P7nmtz5J6ehgp9AJJPK/ZpDI3VFcXB3VehERKILWuv6VqAC2hGe8wR3QBQWuuKH0w1QOPaBDDCG2loFIceKTRQAlFlvXKLLya6QaDi08+Bkr8IRhM/V5v5l+T4nwikUnvfKA6GFxomgaiyvjfKRC+x9fF5GI83ozXHRgeJTdaK/cwUvGsN/kh2kEGLUzd3IfaWqin21IfpWtOJmRbAVEcAMaIbMIOkHCkp70HGU0fSJN1T35ds5hWN5E1ZlOgGCdZMYV9+FjNuAt4nj6SZYE+93p+BLnV0Qy9m/rNB3DG2NI9AMXUkzSwiv9enm4Wb/3xRgQ6LwzXQncCGhySa7Ye0mZz3IsBxCu+MpMl5X128m3nt6ittE0hAYOOTH4AjLAuT2xVJo+aHQ8W8LuhdOvPaRNIsiL1orBTQRRNlnIkEvN+aaUfJImniTLygWYpPN9PLwKwG03qbAzOvmNwHSQV0873WwZE087Ead+VykIgrzyGzcUe3NpJmyGQ5jS2gm+9t3Qm5CgcJ/DmLpJmPu4Qrl4NEQuH+a2qBDL/Nh+wn/eD/L36m6v8DzaSQUEdNVuIAAAAASUVORK5CYII=","text/latex":["$\\displaystyle y + 3 x + \\frac{x y}{3} + x^{2}$"],"text/plain":[" x⋅y 2\n","y + 3⋅x + ─── + x \n"," 3 "]},"execution_count":20,"metadata":{},"output_type":"execute_result"}],"source":["sp.init_printing(order='rev-lex')\n","p2"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"p8msnHs-Zjrf"},"source":["The above code demonstrates that we want `SymPy` to display the expressions in reverse lexicographical order. In this instance, the keyword argument instructs `Python` to print terms with lower powers first."]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"dvfuV62dZjrf"},"source":["We can also employ `SymPy` to substitute values into an expression. This allows us to compute the value of the expression for specific variable values. Take the mathematical expression $x^2 + 2xy + y^2$, which can be defined as follows:"]},{"cell_type":"code","execution_count":21,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":39},"executionInfo":{"elapsed":1025,"status":"ok","timestamp":1683273622448,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"Y3HWpkNYZjrf","outputId":"227c2527-9e00-40cd-8269-9622e5e1013f"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAHwAAAAXCAYAAADJLSsnAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAD7UlEQVRoBe2Z7VEbMRCGDeMCCCVAByR0YDqAUAHQQTL88z+GdACUAB1AB3x0AB2EcQfO+9xIGp3mZHySzncE74ysvT19vLsrrVbnjfl8PmpL0+l0S33OTb8dU59IPms71rp9eQss8s84cbpLDXpm+4q/Ev+ssmtl67pXC0T9s5kI61ROnnh9L8XvSLbnydZsfxaI+ifV4ezup/70Wc/8gQWi/tlIOcPDybSz2eGHqtchPTTOAJ59/6Se4U4NE8YPJfjuhCtmhIHE8beZ9ofqd54lfzGyL1uF/sna4cbQJGxH4nvJ0C0G1QfWq+KJOL9UDsQ/WPlXq61tpLfzT/ION4OxiypDm+eR6re2hlUfEkCSvuu2fdUe57obA/01DrhOxd6qfEM2BBKmHD1bqaC5qqinuuafpKTNDMbOvhK/RxFPSCWUphD3ekoKYcRXYQj7s7O3DNaUcbvok6Pn0niMzo3+Sd3h3LkBT+1IE9V2mnvRLYNjWXSzyDThQog0+6/EUf84h8tgGIYwCO2rnKgQFo5VoEe1uYNRPaQweQSmBqq+CQirS9zEt9HRtuXm8ay+7rgx49yojs3dACdP5GH/EI/aRv3jh3S+zvyhCNqjyo3KRM+EapTnrPwUJMw4m8VqM3eLu42O58YW9+oc6v5TMm4mq6QieKodLsXY2b5SMz2jELsc2lbx31fCAf+QrN0Zh1Uw2+iotiwYFj1E0hPmJshWlv2XxGND+pMG9bNr7tQvkuH4keoioUvjkEhMGDMgFhTzNOUA4Fh6fjPHW0OfNjrS3x4F7OaLAC86hDLXxGAoqWcWHgdMTOVwTzn7rklJ+y651jxNDh1JTjThWsZxkkzqT6TaVs0OrJFk1oFWHtVRbe1Cx2kcZ/75ze5HFt3h6l9Uz1w8wurIP8MroQa3SlYJGkLJuN6g5GBJ+Fg0u6pdNBDPIuIsr5Fky+rIWC7SmUHoO9MY4QKqzdHRQzaesYDjSM48EhpWLasThfwQT8IQJkBqNgwSNnbdfgNGFsG15Kk6slh8O6DwSs9vJvQoG89Yg7FiKXydwjC1BEUy3tkERuywSPgwAgv2QTw5gk8Tybh54PgUHXF2lV8wqMaxtmoM2bTpmLLxjAWQXc0ZhTIodaZyr4LxuMC/i3fhnTYDI65NON1+Q/Dh2bCbqiNRjfs2N5S/KvbfwOj57U/eAZ+NJ+vPk1IKyaBFkrZSeGLjGMcTNZL+GSytZwqezZhyK5bPNB9lMIQxVdynY/Ecd0SRiwyQyXqWwkNI752kTF8hcpHuRB0/J+DLIwlg8vGWqWcRPIMI6Yus3tc7OQcDk7Cxszm7bzMdpiHSqRSef1R58L1i6Q8GAAAAAElFTkSuQmCC","text/latex":["$\\displaystyle x^{2} + 2 x y + y^{2}$"],"text/plain":[" 2 2\n","x + 2⋅x⋅y + y "]},"execution_count":21,"metadata":{},"output_type":"execute_result"}],"source":["sp.init_printing(order='lex')\n","p3 = x*x + x*y + x*y + y*y\n","p3"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"pkT1REc5Zjrf"},"source":["To evaluate this expression, you can substitute numbers for the symbols by using the `subs()` method:"]},{"cell_type":"code","execution_count":22,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":37},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1683273638044,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"CasNK6l6Zjrf","outputId":"696ad4a1-0373-4103-cc64-fc1c3826b839"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA6UlEQVQoFWWR3XHCQAyEbU8KcKCCUEKcElxCWmDogGe/Jh14KIGU4FSQnw5wBzB0YL7PPvFwaGbRam/vJORymqYiouu6Pjh5BbZoV7VSI0UN/wM9/NMD8ivpGzTwsVIkDmAVJgX4P+kXzF3C+I4wgjw0t1yqK3/S6SV3UZ+T9qZxHhbB4fNYJ2ETrb8QNrmL2j9k1GHcWvF6azbgmqLbOK8nHTjrBzgBW/4Au6g1dyPFQ/Cqpj14jtYPpiTYfuDC9UkB4h5d+oti0hzFmRvreNFZ8j0e0XZcdOnLt5YgOI/hS8YRbVhoUdwArdZQb6DcVHgAAAAASUVORK5CYII=","text/latex":["$\\displaystyle 9$"],"text/plain":["9"]},"execution_count":22,"metadata":{},"output_type":"execute_result"}],"source":["p3.subs({x:1, y:2}) # We use dictionary to specify the values of x and y"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"a9I4RaywZjrg"},"source":["Additionally, you can express one symbol in terms of another and perform substitutions accordingly, using the `subs()` method. For instance, if you know that $x = 1 - y$, this is how you could evaluate the previous expression:"]},{"cell_type":"code","execution_count":23,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":40},"executionInfo":{"elapsed":866,"status":"ok","timestamp":1683273664310,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"5Ijk3PdGZjrg","outputId":"bf90a8e8-1d8c-4c60-fda3-5079b728c121"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle y^{2} + 2 y \\left(- y + 1\\right) + \\left(- y + 1\\right)^{2}$"],"text/plain":[" 2 2\n","y + 2⋅y⋅(-y + 1) + (-y + 1) "]},"execution_count":23,"metadata":{},"output_type":"execute_result"}],"source":["p3.subs({x:1-y})"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"gFJ2Xs6lZjrg"},"source":["If you desire a more simplified result — for example, if there are terms that cancel each other out — you can utilize `SymPy`'s `simplify()` function:"]},{"cell_type":"code","execution_count":24,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":37},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1683273686777,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"FvYZOhLcZjrg","outputId":"04d39632-81cc-4a70-95b6-abc7c0fca5db"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAYAAAASVl2WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAZElEQVQYGWP8//8/Aww0NDQYAdmrgdgYyP4AEmcBMgSA9GwgfgfEJkCsBMRwAFIAUhkKEgGyy4AUyBQ4YIKzcDBGFUACBj0chKHhJQQLN0ZQZAGDGBRBIOACxKC4OQfE94B4NwDm+hiAOyllRAAAAABJRU5ErkJggg==","text/latex":["$\\displaystyle 1$"],"text/plain":["1"]},"execution_count":24,"metadata":{},"output_type":"execute_result"}],"source":["sp.simplify(p3.subs({x:1-y})) # The result turns out to be 1 because the other terms of the expression cancel each other."]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"Uu-FFD05Zjrg"},"source":["This example reiterates that `SymPy` will not perform any complex simplification unless explicitly requested to do so."]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["> ### Exercise 1: Try to solve the following problems using `SymPy`:\n","Expand the following expression: $\\sin(4x)\\cos(5x)$ so that the final results only contains `sin(x)` and its power term ($\\sin^n(x)$).\n","\n","Hint: You can use `simplify()`, `subs()` and `expand()` function to simplify the expression. You may find keyowrd `trig=True` argument in `expand()` function useful. Finally, if you want to perform symbolic manipulation, be sure to use functions in `SymPy`."]},{"cell_type":"code","execution_count":25,"metadata":{},"outputs":[],"source":["# Your code here"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"n2WL_WRwZjrg"},"source":["## Solving equations symbolically"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"0Ph6dlkaZjrg"},"source":["`SymPy`'s `solve()` function can be employed to find solutions to equations. When you input an expression with a symbol representing a variable, such as `x`, `solve()` computes the value of that symbol. This function always performs its calculation by assuming the expression you enter is equal to zero — that is, it outputs the value that, when substituted for the symbol, makes the entire expression equal zero.\n","\n","Let's start with the simple equation $x - 5 = 7$. If we want to use `solve()` to find the value of `x`, we first need to make one side of the equation equal zero ($x - 5 - 7 = 0$). Then, we're ready to use `solve()`, as shown below:"]},{"cell_type":"code","execution_count":26,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":37},"executionInfo":{"elapsed":474,"status":"ok","timestamp":1683273807010,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"cwKInpaKZjrh","outputId":"8259ea70-de88-4ccb-da08-37863c97a917"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAABwAAAAVCAYAAABVAo5cAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABhElEQVRIDd2W21ECQRBFB8sAKMwAMvCRAWYgKWgG+rn7qxmgEViYAaSgGUgIFiF47jIj86S2aocfu2ro3u6evtuPmWXUNM2jMeaBJVq0bfu1F+v8Ei+IPwLwmdBrDJs6EPkoxO9wzvPmgxbHS55WrCvk3cGyl9BNkZ6s/hr+o2f02UplAXEes+nNblYQBU3Igi3ht86IrEw+pWMlVTtzjj7HccdSP9Xbd98WyQru+t+Z2KNsVQlVJaEsYOJVVswxfQOiivikzMbok8oMBVTgLYGT3lr0+EVMtof+qx6TAVoU7Bo0gz0ZnKEZJniACEyldJMb+FQHJLqG5QPglwDJPlQFBGRJXPW0VGpTDRCQe8Am8L8zebIMAbkj+MzPDHmqFYMOzpCgGpIbeDwkegldcwH1ORYXdscEHpw3m4GGZIOs/vk0R5cMThEQZ3c16TYRrdBt4fqyvHYaZLjKpv7FlJxBORwDLE6aiwzwzMl9+eAe9gVyfv8f0PVQH1Flfcr/NJry9S9FyXp4WTyB6QAAAABJRU5ErkJggg==","text/latex":["$\\displaystyle \\left[ 12\\right]$"],"text/plain":["[12]"]},"execution_count":26,"metadata":{},"output_type":"execute_result"}],"source":["x = sp.Symbol('x')\n","expr = x - 5 - 7\n","sp.solve(expr)"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"Vzs4ia7GZjrh"},"source":["Observe that the result 12 is returned within a list. An equation can have multiple solutions — for instance, a quadratic equation has two solutions. In such cases, the `list` will include all the solutions as its elements. Let's look at an example:"]},{"cell_type":"code","execution_count":27,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":39},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1683277995269,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"H2Zpba0QZjrh","outputId":"40184aeb-2470-4314-9407-834c9a87ab07"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left( \\left[ -4, \\ -1\\right], \\ \\left[ \\left\\{ x : -4\\right\\}, \\ \\left\\{ x : -1\\right\\}\\right]\\right)$"],"text/plain":["([-4, -1], [{x: -4}, {x: -1}])"]},"execution_count":27,"metadata":{},"output_type":"execute_result"}],"source":["x = sp.Symbol('x')\n","expr = x**2 + 5*x + 4\n","sp.solve(expr), sp.solve(expr, dict=True)"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"NJSz4CLaZjrh"},"source":["It's worth noting that we can set `dict=True` as an argument to retrieve a `dictionary` instead of a `list`.\n","\n","In addition to finding the roots of equations, we can leverage symbolic math to utilize the `solve()` function to express one variable in an equation in terms of the others. Let's examine finding the roots for the general quadratic equation $ax^2 + bx + c = 0$. To accomplish this, we'll define `x` and three additional symbols — `a`, `b`, and `c`, which correspond to the three coefficients:"]},{"cell_type":"code","execution_count":28,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":68},"executionInfo":{"elapsed":386,"status":"ok","timestamp":1683278136731,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"3cOshMKPZjrh","outputId":"32e696bc-48b6-4e8e-d0b7-e6b91ab4cd05"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left[ \\left\\{ x : \\frac{- b - \\sqrt{- 4 a c + b^{2}}}{2 a}\\right\\}, \\ \\left\\{ x : \\frac{- b + \\sqrt{- 4 a c + b^{2}}}{2 a}\\right\\}\\right]$"],"text/plain":["⎡⎧ _____________⎫ ⎧ _____________⎫⎤\n","⎢⎪ ╱ 2 ⎪ ⎪ ╱ 2 ⎪⎥\n","⎢⎨ -b - ╲╱ -4⋅a⋅c + b ⎬ ⎨ -b + ╲╱ -4⋅a⋅c + b ⎬⎥\n","⎢⎪x: ─────────────────────⎪, ⎪x: ─────────────────────⎪⎥\n","⎣⎩ 2⋅a ⎭ ⎩ 2⋅a ⎭⎦"]},"execution_count":28,"metadata":{},"output_type":"execute_result"}],"source":["x = sp.Symbol('x')\n","a = sp.Symbol('a')\n","b = sp.Symbol('b')\n","c = sp.Symbol('c')\n","\n","expr = a*x*x + b*x + c\n","sp.solve(expr, x, dict=True)"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"WHe0SPIJZjri"},"source":["In this example, we must include an additional argument, `x`, to the `solve()` function. Because there's more than one symbol in the equation, we need to inform `solve()` which symbol it should solve for, which we indicate by passing in `x` as the second argument. As anticipated, `solve()` outputs the quadratic formula: the general formula for determining the value(s) of `x` in a polynomial expression."]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["We can also sove the expression using `nsolve()` function. `nsolve()` function is a numerical solver that uses numerical methods to find the roots of an equation given a starting point. For example, we can solve the equation $x^2 - 2 = 0$ using `nsolve()` function:"]},{"cell_type":"code","execution_count":29,"metadata":{},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left( -1.4142135623731, \\ 1.4142135623731, \\ \\left[ - \\sqrt{2}, \\ \\sqrt{2}\\right]\\right)$"],"text/plain":["(-1.4142135623731, 1.4142135623731, [-√2, √2])"]},"execution_count":29,"metadata":{},"output_type":"execute_result"}],"source":["x = sp.Symbol('x')\n","expr = x**2 - 2\n","sp.nsolve(expr, -1), sp.nsolve(expr, 1), sp.solve(expr) # -1 and 1 are the starting points"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"yOgsmKaoZjri"},"source":["### Solving a system of linear equations"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"OeMxABDRZjri"},"source":["Consider the following two equations:\n","\n","$$\n","\\begin{align}\n","2x + 3y &= 6 \\\\\n","3x + 2y &= 12\n","\\end{align}\n","$$\n","\n","Suppose we want to find the pair of values `(x, y)` that satisfies both equations. We can use the `solve()` function to find the solution for a system of equations like this one. First, we define the two symbols and construct the two equations:"]},{"cell_type":"code","execution_count":30,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":58},"executionInfo":{"elapsed":654,"status":"ok","timestamp":1683279858775,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"xXekWJ2fZjri","outputId":"8de2358b-f10c-48de-f4cd-a0c4473d2740"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left[ \\left\\{ x : \\frac{24}{5}, \\ y : - \\frac{6}{5}\\right\\}\\right]$"],"text/plain":["[{x: 24/5, y: -6/5}]"]},"execution_count":30,"metadata":{},"output_type":"execute_result"}],"source":["x = sp.Symbol('x')\n","y = sp.Symbol('y')\n","expr1 = 2*x + 3*y - 6\n","expr2 = 3*x + 2*y - 12\n","\n","sp.solve((expr1, expr2), dict=True) # Enclose the equations in a tuple"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"lnceNFQoZjri"},"source":["Observe how we've rearranged the expressions so that they both equal zero. Retrieving the solution as a dictionary is beneficial in this scenario because we can verify whether the solution we obtained indeed satisfies the equations:"]},{"cell_type":"code","execution_count":31,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":37},"executionInfo":{"elapsed":1170,"status":"ok","timestamp":1683279898628,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"gjJGypl-Zjri","outputId":"460c9c11-ea7c-4b2e-a7e4-e63e55bc92b9"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAADEAAAAVCAYAAADvoQY8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACS0lEQVRYCc2X71ECMRDFT8YCbrSDswOUCpQOlA6EDvAjfHOwA+3A0RK0Akc6wA5EOsD3yyQQQw6O3DnDzoTNbv68t5uE5LLlcpn5ZTQaFb59aPUYv1bmyXg8Hspse65DrBaW54rbEZlG1HAt1ZG+Mw7vR76JNb+lz1Qm8n15XRqrVsFSH5K9kH4C2AQhI1f9Xfocpy/yfcq+l37FL01ffF3VGw1E81XGsn0vpRduO5HpR5U/og59OXJpEwCNDJLC3uhPe6okYIFvdogLoqdJzNIEJG5kTwMf5ofKlcawKk3JXliWL7zzln44C2Xb4kpt8whL15/2piQFCx49VqKr8hYyqZjlk3Bcil0DC95dgrhQmUXAHUHOQJk0tZ1SseBdEAREYlumjLjvP/WNf67HsOBtgiALsWxvC8xljnujCUnF4kzkrERUtE9dYLEt43zugEfnqOqsgWUWgCDIgiMV4nJwitAp263Exh9CpG9VVwoWvOcEQTZjRAF/UeHgh8LNPvUymKlelohwbJldGcubgGR+EcRUpeM1rKoixgU4l+YuMWLJ9mTcWldmfT/SPBuSRGMrYQWTm2Qey/msQhbKhI48+AiUg4zmzULwRlTnMWYOmTTPlIVr21PvxArm44IcmG8JvdFnKu263w6a41olrztPlfHCKVRm9GU7ITykBqZW74enfOoq7IvMJ8P6AShg9iMfG2UHfCeAxnKwm7o3tuJZnvA1j1a3EgziFVnned3XpA9b0ZtrhOd65/j7z+6zoe87tLo4DuHp8/oFEcR4V5FVRiUAAAAASUVORK5CYII=","text/latex":["$\\displaystyle \\left( 0, \\ 0\\right)$"],"text/plain":["(0, 0)"]},"execution_count":31,"metadata":{},"output_type":"execute_result"}],"source":["sol = sp.solve((expr1, expr2), dict=True)\n","expr1.subs({x:sol[0][x], y:sol[0][y]}), expr2.subs({x:sol[0][x], y:sol[0][y]})"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"0M7eZTpiZjri"},"source":["The output of substituting the values of `x` and `y` corresponding to the solution in the two expressions is zero, which confirms that the solution satisfies both equations."]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"X7kiLRgfZjrj"},"source":["If we're unable to obtain the exact solution, we can still obtain the numerical solution using the `nroots()` function:"]},{"cell_type":"code","execution_count":32,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":68},"executionInfo":{"elapsed":565,"status":"ok","timestamp":1683279943891,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"dfCvXghZZjrj","outputId":"1701c0bf-590d-4ce2-8aaa-7c7544823217"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left( \\left[ -1, \\ - \\frac{1}{2} + \\frac{\\sqrt{5}}{2}, \\ - \\frac{\\sqrt{5}}{2} - \\frac{1}{2}\\right], \\ \\left[ -1.62, \\ -1.0, \\ 0.618\\right]\\right)$"],"text/plain":["⎛⎡ 1 √5 √5 1⎤ ⎞\n","⎜⎢-1, - ─ + ──, - ── - ─⎥, [-1.62, -1.0, 0.618]⎟\n","⎝⎣ 2 2 2 2⎦ ⎠"]},"execution_count":32,"metadata":{},"output_type":"execute_result"}],"source":["expr1 = x**3 + 2*x**2 -1\n","sp.solve(expr1), sp.nroots(expr1, n=3) # n is the number of digits to calculate"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"bg-enkVpZjrj"},"source":["## Plotting using `SymPy`"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"BhJPWX0kZjrj"},"source":["With `SymPy`, you can simply provide the equation of the line you wish to plot, and `SymPy` will create the graph for you. Let's plot a line whose equation is given by $y = 2x + 3$:"]},{"cell_type":"code","execution_count":33,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":487},"executionInfo":{"elapsed":1284,"status":"ok","timestamp":1683281743277,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"kesNFphrZjrj","outputId":"a458c277-bd66-4393-a3fd-1f92118e9290"},"outputs":[{"data":{"image/png":"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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["x = sp.Symbol('x')\n","sp.plot(2*x+3);"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"_LEydsWoZjrj"},"source":["> The graph reveals that a default range of `x` values was automatically selected: −10 to 10. In reality, `SymPy` employs `matplotlib` in the background to generate the graphs."]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"4hY2CBYwZjrj"},"source":["Suppose you wanted to constrain the values of `x` in the previous graph to lie within the range of −5 to 5. Additionally, we can use other keyword arguments in the `plot()` function, such as `title` to specify a title or `xlabel` and `ylabel` to label the x-axis and the y-axis, respectively. Here's how to accomplish this:"]},{"cell_type":"code","execution_count":34,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":486},"executionInfo":{"elapsed":567,"status":"ok","timestamp":1683281794099,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"bdvxwHA3Zjrk","outputId":"49f521b5-fc72-480c-8aa2-7cf676243788"},"outputs":[{"data":{"image/png":"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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["sp.plot(2*x + 3, (x, -5, 5), title='A Line', xlabel='x', ylabel='2x+3'); #(symbol, start, end) to specify the range"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"g8VoA_grZjro"},"source":["You can plot more than one expression on the same graph by providing multiple expressions when calling the `SymPy` `plot()` function. Here's the code:"]},{"cell_type":"code","execution_count":35,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":487},"executionInfo":{"elapsed":1427,"status":"ok","timestamp":1683281815753,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"gOarIDnRZjro","outputId":"d7670315-f7a3-4a74-8c70-abd2f0cb496a"},"outputs":[{"data":{"image/png":"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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["x = sp.Symbol('x')\n","p = sp.plot(2*x+3, 3*x+1, legend=True)\n","p[0].line_color = 'b'\n","p[1].line_color = 'r'"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"11MSnVOkayA3"},"source":["We use the `plot()` function with the equations for the two lines but also pass two additional keyword arguments — `legend`. By setting the `legend` argument to `True`, we add a legend to the graph. `p[0]` refers to the first line, $2x + 3$, and we set its `line_color` attribute to `'b'`, indicating that we want this line to be blue. Similarly, we set the color of the second plot to red using the string `'r'`. "]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["You can even plot an implicit function using `plot_implicit()` function. For example, let's plot the circle $x^2 + y^2 = 1$:"]},{"cell_type":"code","execution_count":36,"metadata":{},"outputs":[{"data":{"image/png":"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1SO3pN4u53dasWJFTj311Jx55pmZMmVKRZP3ziGHNELg7Erbr1ZLFi9uLNNWNnXq1PziF7/I7Nmzqx5lQFm+fHmmTZuWO++8MzvttFPV4zRNy577t6urK6+//vpWb3PggQfmrLPOyv3337/Jh8quX78+gwcPznnnnZc77rij2aO2tN4u5x133DFJsnLlykycODETJkzId7/73Qwa1P9/b5s3L3njjeRv/qbqSd5t3bp12XnnnfMv//IvOe+88zae+/f888/Pb3/728ydO7fqETf63vcaJ9Fv5TXVSy65JHPnzs2iRYtywAEHVD3OgDJnzpycccYZGTx48Mbr1q9fn46OjgwaNCg9PT2b/KxVtWxUe+uVV15J9ztWQ1auXJlTTjkl9957b4455pjss88+FU43sKxYsSInnHBCjjzyyHzve99rqX8g55+f3H570h9/BzjmmGMybty4fOMb30itVsvw4cOz77775pJLLskVV1xR9XhJkg0bksmTk1b9HbVer+fSSy/Nfffdl0ceeSQHH3xw1SMNOKtXr87LL7+8yXWTJ0/O2LFj86UvfWnAbGofsB/99rZ99913k++HDx+eJDnooIMEtaAVK1Zk4sSJ2W+//XLttdemq6tr48/23HPPCifrnXPOSe66KznvvKonebcZM2bkb//2b5Mkzz//fL71rW/1u89inT27sQxb1dSpU/P9738/c+fOzYgRIzbur+7s7MzQVj/qqp8YMWLEu8I5bNiw7LrrrgMmqEkL71Olf5k/f36WLVuWBQsWZJ999sno0aM3XlrBaaclDz2UrF9f9STvdvbZZ+ef/umfkiTHHXdcnn766ff1WazNtn59YxP6aadVPcm2+/rXv55arZaJEydu8nf37rvvrno0WsyA3/wLvfXAA42zAfXHY6v68+epfvObyV57NY6khnZnTRX+4BOfSJ58snEUK71TqyVPPJF8/ONVTwL9g6jCHwwd2jjY5mtfq3qS1nHjjclFF7X+yR6gFFGFd5gwIVm7Nrnnnqon6f/uuSf53/9Njjmm6kmg/xBV+COzZjVOtP+OA5j5I11djWU0gE+MA9tEVGEzrrwyueSS5LXXqp6k/3n11cay6ccfQASVEVXYjAMPTGbMSL797aon6X++853ki19sLCNgU6IKWzB+fOMAnBtvbJwxqN1t2NBYFkOHJkcfXfU00D+J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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["sp.plot_implicit(x**2 + y**2 -1, aspect_ratio=(1,1));"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["> ### Exercise 2: Find all the intersection points between $f(x)=4\\cos(3x)$ and $g(x)=x^3$ using `SymPy` by first plotting the function and using the graph to narrow down the range of the intersection points. Then, use `nsolve()` function to find the intersection points.\n","\n","Hint: You may find `solve()` and `nroots()` can not be used to solve this problem. In addition, you may need to zoom in around 0 to find all the possible intersection points."]},{"cell_type":"code","execution_count":37,"metadata":{},"outputs":[],"source":["# Your code here"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"cU8MXI8KZjrp"},"source":["## Calculus with `SymPy`"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["### Series expansion"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["`SymPy` is also capable of calculating the Taylor series of an expression at a specific point. Utilize `series(expr, x, x0, n)` to determine the series expansion of `expr` around the point `x = x0` up to `O(x^n)` (where `n` is an integer):"]},{"cell_type":"code","execution_count":38,"metadata":{},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle 1 - \\frac{x^{2}}{2} + \\frac{x^{4}}{24} - \\frac{x^{6}}{720} + \\frac{x^{8}}{40320} + O\\left(x^{10}\\right)$"],"text/plain":[" 2 4 6 8 \n"," x x x x ⎛ 10⎞\n","1 - ── + ── - ─── + ───── + O⎝x ⎠\n"," 2 24 720 40320 "]},"execution_count":38,"metadata":{},"output_type":"execute_result"}],"source":["sp.series(sp.cos(x), x, 0, 10)"]},{"cell_type":"code","execution_count":39,"metadata":{},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\frac{x^{9}}{362880} - \\frac{x^{7}}{5040} + \\frac{x^{5}}{120} - \\frac{x^{3}}{6} + x$"],"text/plain":[" 9 7 5 3 \n"," x x x x \n","────── - ──── + ─── - ── + x\n","362880 5040 120 6 "]},"execution_count":39,"metadata":{},"output_type":"execute_result"}],"source":["sp.series(sp.sin(x), x, 0, 10).removeO()"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["Additionally, we can eliminate the `O(x^n)` term by applying the `removeO()` method:"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["### `lambdify()`"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["The `lambdify()` function translates `SymPy` expressions into Python functions so that they can be evaluated numerically."]},{"cell_type":"code","execution_count":40,"metadata":{},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAABkAAAAOCAYAAADaOrdAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABLklEQVQ4Ea2U+w3BUBTGEQM0bMAGHhvUBtgAa/Q/MQImEDbQDYQNdIM23aB+X3NvQ3Mj5PYkX8+j53Vfp10URctSFEUj5DMYI+fW/gvHf2f8UvgQ7LAlsnURAvgRZGACBuAvIsedgC38okCT8w6fgaTDJwcLsOH/SU7/EHFr/AN4WUCxyNoF6XvpHX08aUH8w5Hjhi2kYNBEkZBk2uo6leeBMfQqoi7rmR16z6sICXsm6beb2Mh2OZr/MPV9V+I6C1vBrjL1KmKuqpK6zsbaEq8ipuUYPjDyO7MriZsoojGkSVGnMYaHVlsv0jeetosqUNcVFEAjpCL0A0oGn1sjsrZqCVaytTUgMaobkR6WHPSC9Ziu/FOSkpCfCDFcI6gidMVoQOZAA3IKNMvKSfACZ3hjjjX0FpgAAAAASUVORK5CYII=","text/latex":["$\\displaystyle 1.0$"],"text/plain":["1.0"]},"execution_count":40,"metadata":{},"output_type":"execute_result"}],"source":["expr = sp.series(sp.cos(x), x, 0, 10).removeO()\n","f = sp.utilities.lambdify(x, expr)\n","f(0)"]},{"cell_type":"code","execution_count":41,"metadata":{},"outputs":[{"data":{"image/png":"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x+vTPytfn+N1PEwMnAIAgKAifAAAgKAifBxFbGys7rjjDsXGxlpdii3x+vSP1+fYeG36x+vTP16f/oXS62O7gVMAABDe6HwAAICgInwAAICgInwAAICgInwAAICgInycgFdffVVz5sxRfHy80tLSdNlll1ldku14PB5NnTpVDodDmzZtsrocW9i/f7++/vWvq7i4WPHx8Ro1apTuuOMOdXZ2Wl2aZR544AGNGDFCcXFxmjNnjtatW2d1SbawfPlyzZo1S8nJycrOztZll12mnTt3Wl2WLf3yl7+Uw+HQrbfeanUptlFeXq6vfvWrysjIUHx8vCZPnqz169dbXVa/CB/H8be//U3XXXedbrzxRm3evFnvv/++vvKVr1hdlu3cfvvtys/Pt7oMW9mxY4f8fr8efvhhbdu2Tb/97W/10EMP6Uc/+pHVpVni6aef1m233aY77rhDGzdu1JQpU7RgwQJVV1dbXZrlVq1apaVLl2rt2rV666231NXVpYsuukitra1Wl2YrH330kR5++GGdfvrpVpdiG4cPH9a8efMUHR2t119/Xdu3b9d//dd/KS0tzerS+mfgmLq6uoxhw4YZf/zjH60uxdZee+01Y/z48ca2bdsMScbHH39sdUm29etf/9ooLi62ugxLzJ4921i6dGngzz6fz8jPzzeWL19uYVX2VF1dbUgyVq1aZXUpttHc3GyMGTPGeOutt4xzzz3X+O53v2t1Sbbwgx/8wDjrrLOsLmPA6Hz0Y+PGjSovL5fT6dS0adOUl5enRYsWaevWrVaXZhtVVVW66aab9Oc//1kJCQlWl2N7jY2NSk9Pt7qMoOvs7NSGDRt04YUXBj7mdDp14YUXas2aNRZWZk+NjY2SFJE/K8eydOlSXXLJJX1+hiC99NJLmjlzpq688kplZ2dr2rRp+p//+R+ryzouwkc/9u7dK0n66U9/qh//+Md65ZVXlJaWpvnz56u+vt7i6qxnGIZuuOEGfetb39LMmTOtLsf2SkpKdN999+mb3/ym1aUEXW1trXw+n3Jycvp8PCcnR5WVlRZVZU9+v1+33nqr5s2bp0mTJlldji089dRT2rhxo5YvX251Kbazd+9ePfjggxozZozefPNNffvb39a//Mu/6LHHHrO6tH5FZPj44Q9/KIfD0e/DXK+XpH//93/X4sWLNWPGDD3yyCNyOBx69tlnLf5/MXRO9PW577771NzcrGXLllldclCd6OtzpPLyci1cuFBXXnmlbrrpJosqRyhYunSptm7dqqeeesrqUmyhtLRU3/3ud/XXv/5VcXFxVpdjO36/X9OnT9cvfvELTZs2Td/4xjd000036aGHHrK6tH5FWV2AFf71X/9VN9xwQ7/PGTlypA4dOiRJOu200wIfj42N1ciRI3Xw4MGhLNFSJ/r6rFy5UmvWrPncfQRmzpypa6+91vbJ+2Sd6Otjqqio0HnnnaczzzxTf/jDH4a4OnvKzMyUy+VSVVVVn49XVVUpNzfXoqrs5+abb9Yrr7yi1atXq6CgwOpybGHDhg2qrq7W9OnTAx/z+XxavXq17r//fnk8HrlcLgsrtFZeXl6fa5QkTZgwQX/7298squjERGT4yMrKUlZW1nGfN2PGDMXGxmrnzp0666yzJEldXV3av3+/ioqKhrpMy5zo63Pvvffq5z//eeDPFRUVWrBggZ5++mnNmTNnKEu01Im+PlJ3x+O8884LdM2czohsNiomJkYzZszQihUrAlvV/X6/VqxYoZtvvtna4mzAMAzdcsstev755/XOO++ouLjY6pJs44ILLtAnn3zS52M33nijxo8frx/84AcRHTwkad68eZ/blr1r1y7bX6MiMnycKLfbrW9961u64447VFhYqKKiIt19992SpCuvvNLi6qw3fPjwPn9OSkqSJI0aNYp3beoOHvPnz1dRUZF+85vfqKamJvC5SHy3f9ttt2nJkiWaOXOmZs+erXvuuUetra268cYbrS7NckuXLtUTTzyhF198UcnJyYE5mJSUFMXHx1tcnbWSk5M/N/uSmJiojIwMZmIkfe9739OZZ56pX/ziF7rqqqu0bt06/eEPf7B9l5XwcRx33323oqKidN1116m9vV1z5szRypUr7b+HGpZ76623VFJSopKSks+FMSMCbyb95S9/WTU1NfrJT36iyspKTZ06VW+88cbnhlAj0YMPPihJmj9/fp+PP/LII8dd4kNkmzVrlp5//nktW7ZMd911l4qLi3XPPffo2muvtbq0fjmMSPwtCAAALBOZC9AAAMAyhA8AABBUhA8AABBUhA8AABBUhA8AABBUhA8AABBUhA8AABBUhA8AABBUhA8AABBUhA8AABBUhA8AABBUhA8AABBU/x9z8vx4bYGKvgAAAABJRU5ErkJggg==","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["import numpy as np\n","import matplotlib.pyplot as plt\n","x = np.linspace(-2*np.pi, 2*np.pi, 100)\n","plt.plot(x, f(x));"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["### Limits"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"xJnbusYbZjrp"},"source":["To find limits of functions in `SymPy`, we can create objects of the `Limit` class as follows:"]},{"cell_type":"code","execution_count":42,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":51},"executionInfo":{"elapsed":487,"status":"ok","timestamp":1683281902840,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"IuhOgihVZjrp","outputId":"5bfd1077-607c-445f-d49e-3ea6620d96f6"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAADwAAAArCAYAAAAkL+tRAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEBUlEQVRoBe2Z7VEbMRCGD4YCIOnA6YCPDkIHASoAOgjDP/5loANIB4EOoAM+OggdhNABeR4hXXS+w+PjfIA93pm1pJW0p1e7+lh54enpqZg1Ojo6WgXTObxG/jHHt5QXpjkPsGXG/xN+gNfhAVyjWQKsJbdECPjvJFq5Ros1yYwL5oBn3MDF3MJzC8/YDMxdesYMWoMzt3BtSqZT8DkO+9Pw8BdmKXjgSmnAIH2FvVvfwffwJXVnpMVIwDTyPuqFfABfUQ53VfIFeWW38AH5oEz5R6eRaxggd/AaIJylYRKws2j91NBIwBkKQ64KMRFXCFZI9ysVH7wwLuBGGIA1JJsq6gR4qpDGwb7qAQDLun7dEU3LzQx5vsn9ou4Y/gZLm7C75QnsLpoCdOXHyFwivdNrAbuJ+V7kLl0SZY8B5b9JPQNXyZ/YgFRAt6Qug/tMbtnJW4F7p64uXdvM4oidkK+AukgIyDsZ0hb53Jo3yJaRJYuHRn39dAU8alwCaaIEvKmud9mrXLrjqP507F/pjme0emd+D8CVAXctAHihjY4+XbrNON6s7SQAe70cJnfotvSaPm2/MVbwcIhWz03J3fUAFuSwfBfZIMo9ez1ubP8DVu4VVD1Bjiu6W3tOK3OHdme/QKb+3mhktNTbV99R8SRc+h2H3/7Tc8Dt52y6eswt3NVe7LJpR++qqpf+S0krA/U/VekLnMK6kKeu6YknNG74MUIq4DxAqDSjbg+BR5tPSJV2lJVvx3pDz7Hu3rGfeqUNOB2TO0FSFNe0uQguTUawnoGGcl4ATmPef9I9I9uQD3qNZyk6jYoMBY2ynETjYEPGAfmC1PPbR8Mb8mEspAmETUaRuoy17XcNq8eILd0bNGL57+EjFcmKzvClldAu8jLEexaN/qW9FwtfMs/hACTrsYfMC4eTK/sAKHhBC2yH1PpgVVKt/0A6rAfxf6LevgFQlDoGJy+9pmrEUB9cmg6pwvauwfAwh7x0J/J2aGNt9ejem3CaTAdSoVjvQ8Ip3PQIIGh1JR1ka6RH5PVOpMslfI+0fF4OgFN3KgRUWpvyAA6KSBvdNPXNU9q6RPzguH20soPT3X3yyUnr5mDyupDnO6VhYqV7gFfaGi3SWFB/Y80Oaa583AGXitVHYYO0qa/uWfESylpW1irrlH33WiZfxHSfdBiQ1Y1EW73B/uVSVE/U9Rw8UPCDvkOp2BlOQfoZdcEtkI1FUZcbSD5xZV/krjd3/wCK1A0yACJVdgin4EMd7iMvjiH20TPCQyBl825W5fIgb10wwMSDBxQ7my8OkMFMlPiWkyNIPcQJcq/ZRh4AkwaLkwaLTxwwH3tTAoheIUg9tKDs0eQk6Kluhi6j0r3/AcpuhjpcePAEAAAAAElFTkSuQmCC","text/latex":["$\\displaystyle \\lim_{x \\to \\infty} \\frac{1}{x}$"],"text/plain":[" 1\n","lim ─\n","x─→∞x"]},"execution_count":42,"metadata":{},"output_type":"execute_result"}],"source":["x = sp.Symbol('x')\n","l = sp.Limit(1/x, x, sp.oo) # (function, variable(symbol), limit)\n","l"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"aqozhK8lZjrp"},"source":["The result is returned as an unevaluated object. To obtain the value of the limit, we can use the `doit()` method:"]},{"cell_type":"code","execution_count":43,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":37},"executionInfo":{"elapsed":582,"status":"ok","timestamp":1683281919553,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"Ok-wGJjRZjrp","outputId":"db2e74ee-d067-4e03-e3d8-6673ccc35430"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAz0lEQVQoFXWS4Q2CMBCFhQkIbqAjqBvgBsoGOkf/GUbQFXQENjAyAhtA2AC/V3tGG2hyeXdfH71LSzKO48KWc64KeYeuiQrWiiVmBLyoL+hDG2iGiO3J2zTAM5qZKbAB1UdX1d6IHolGIFpP6kKnm7EA9JFJpZ8PLdIwy4TnD+U6MQ9IM82tb+s5g/GlTpyazQzWrdOM1lL3Fi9jn3tktyZWsYvaTqzteu7A7YRxA2vU1RtJboAePZiZXG1L4iT2+9ba0E8xEPopdoTe3r/YGx/SQ0OZAIYmAAAAAElFTkSuQmCC","text/latex":["$\\displaystyle 0$"],"text/plain":["0"]},"execution_count":43,"metadata":{},"output_type":"execute_result"}],"source":["l.doit()"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"tZRPZigUZjrp"},"source":["By default, the limit is calculated from a positive direction unless the value at which the limit is to be computed is positive or negative infinity. If the limit is at positive infinity, the direction is negative, and if it is at negative infinity, the direction is positive. We can change the default direction as follows:"]},{"cell_type":"code","execution_count":44,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":37},"executionInfo":{"elapsed":1499,"status":"ok","timestamp":1683281952301,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"NeUGfqVmZjrp","outputId":"9762539f-6322-4bc4-9f1b-ec58b3054640"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAHsAAAAVCAYAAABmOZFVAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADUUlEQVRoBe2Z7VHcMBCGDUMBJKkgRwchqQDogI8OoIMw+XX8Y0gHpIMEOgA6CHQQOghcB+R5jOXxXXQ3xh+JuPHO6FZayfKuXu2u5Muenp6yahmPx6Nqe6hPr89rWY8YjqtZhU5OTj7T/FARDdXXuwKjAs/SghJsOnaRvoNflr1D5dWuADheqzz8MBixYlhCsI7gBr4ZOga+HCsAprdYsgWfBM8+Q3C+HOYNVsysgLiKbxY8+xHk38wMGppLsgJg+4gp79eomKvvF9nFGA9t25QNyi3tb7HxyE0H+xTTgeHjB7IJvHNKUae2RvZok/juG8Z3KHkyjymLAib4PAzABe4MmZFA8Eui7aa5oTjxMeUn5Qvyzk/3zJmcTtjainq2SXx31vj5SInmaxQY0bcJd0PkRP2UiqBeUd+jXFIE+gBePeDdIbtD5kax3gkxX3I6tTXsH9j0Cx239WxD78MchY9Q5KjaR1vv3qLIL2gLtB68B4/Rd/qmokBs0AtkKer0AvWjQ/u2SXxHevZbisDF6HdMKOAUATcvX1BKz58dzzi9u7zrzfY3aCenE/bpMEY7eV0yKoaI17dNptZ1wW5EBYhfedivbnr/3LxP30sWgeHN6H/pxHt1lmoKa2ZA5KmObMod2jCuizcFw/Ds7txFqaj3IjfHLjzt098lpahTW/va2iS+D4ItEAISo3vAip6mkRu+PawZzp3jfM7Yv7yecU03F6/JUtRJvdpQLzZVFNKz71f4d8TTsh/Nowcs5J7Uj+GGqgwuUALtadwwrszNckWRe+0K39etT93Li+e95JvLG4U+nktOJ+xpRV3bVFWmmHsi2Hqup2o/mESJvnxD0CnQgn6KLBwuymeQmb8PKM5pv+MC8DSfCZlXAclrXb6Jnpv1f3kuOZ3qax8f2bVN4S3Feh+Fz6UufvV0GMb1xlHAK9s1vBHYfSiWok5t7cSmPOrCN1aLyfSSqft025fUeP5TSkAX+qaoU42lXDjEVCq+WQ42i+63bvO2u6B34j2mg+jdsveXz3lBijrNUbW2uMBTXPP/MoJnO4EHtOhn09qz1x94iAL54a7+I72PTFGntkaLZxmx85wdZix2gnfm1IAIKg685gqAoYdl/7cov3H8AQ1fdClILnKgAAAAAElFTkSuQmCC","text/latex":["$\\displaystyle \\left( \\infty, \\ \\infty, \\ -\\infty\\right)$"],"text/plain":["(∞, ∞, -∞)"]},"execution_count":44,"metadata":{},"output_type":"execute_result"}],"source":["sp.Limit(1/x, x, 0).doit(), sp.Limit(1/x, x, 0, dir='+').doit(), sp.Limit(1/x, x, 0, dir='-').doit()"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"of7R97mlZjrq"},"source":["We can change the default direction of limit calculation using the `dir` argument. The symbol `dir='-'` specifies that we are approaching the limit from the negative side. Alternatively, instead of using the `Limit` class, we can use the `limit()` function to find the limit of a function directly:"]},{"cell_type":"code","execution_count":45,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":39},"executionInfo":{"elapsed":403,"status":"ok","timestamp":1683282157789,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"G03YIRPXZjrq","outputId":"9fb1aab3-e140-454e-ed34-ba007d38f93a"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAADEAAAAVCAYAAADvoQY8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACKElEQVRYCdWX4VHCQBCFA2MBUTuIHYBUoHSAlGA6gPEX/NUO1Aoc7ACtwJEOoAOVDvB9x13mhIuDyWDCm9nc3ia39/ZuN7lEq9Uq8mU0GiV+v256iF8z8jAejwfqtjxTHdXE8sy4NVhpoBs9NR21Q2PYuMhOcBNJW/py4/a/djU/i71U+8DEJgh1YumvatsYHaz9Uf1PybmEQI5lrzQIcYjE4V3NBVyOMAi3knujeRdL9gqT9LqlGnzhnbqa6Iuk2RoIHwIsX3jHTV2ohcUhEA9whHefdOpKXgIPVGJiZTXxjeTDEjhTO5Q9VIfw7pJOFOxcUjlE9FIkKNgn6XeIdHKfoEKAd8JOEDlvn0ohwokITCWp9JlHhsCwhwBvE8SJlNBWhQbt08aKg1hB8CYEp5Kp+nnpTk3E7ERdwIo/izAptCvMBlATbAkpVQe8/ZGEKQWCYEvIx1LQCpZdCHiQPluQbz4DIbATC4KgiDqhJzZsbgIG/oAN4Estb5ai4OtLSmXAr4Ra8Qs9uy+FY9KsoaNtS8pED/M+3oLsHPoAE7DaOGTVKLjsKy/dvaYLHxDlg4JmsZwvgsitETtnav4lFMicYMr+O8hHTxKX9bPLeM2TSOY8SzoBc5Baq6WuHOWXpTzsPphfBnivg9DEpAU/G4ULXGNJNXdUwPfeYHnC16Sz2wkm5MjtPjhFCFzLaW7+FnH4yxh4ptl9P/9sng18W910cRzA0+f1DXcGSPcLbzBJAAAAAElFTkSuQmCC","text/latex":["$\\displaystyle \\left( 1, \\ e\\right)$"],"text/plain":["(1, ℯ)"]},"execution_count":45,"metadata":{},"output_type":"execute_result"}],"source":["sp.limit(sp.sin(x)/x, x, 0), sp.limit((1+1/x)**x, x, sp.oo)"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"qtEfPAKDZjrq"},"source":["### Finding the derivative of functions"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"N0tuYRbzZjrq"},"source":["To find the derivative of a function, we can create an object of `Derivative` class:"]},{"cell_type":"code","execution_count":46,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":52},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1683282297837,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"7c7NFsVMZjrq","outputId":"961d1f1a-51a8-4029-823f-8ed7ef3f9244"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\frac{d}{d t} \\left(5 t^{2} + 2 t + 8\\right)$"],"text/plain":["d ⎛ 2 ⎞\n","──⎝5⋅t + 2⋅t + 8⎠\n","dt "]},"execution_count":46,"metadata":{},"output_type":"execute_result"}],"source":["t = sp.Symbol('t')\n","St = 5*t**2 + 2*t + 8\n","sp.Derivative(St, t)"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"z_bCCSwrZjrq"},"source":["Similar to the `Limit` class, when we create an object of `Derivative` class, it doesn't calculate the derivative right away. Instead, we need to call the `doit()` method on the unevaluated `Derivative` object to evaluate and obtain the derivative:"]},{"cell_type":"code","execution_count":47,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":39},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1683282334084,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"ETcVd9nRZjrq","outputId":"d846ceec-5a15-441d-cc49-48d086f8cd4a"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAD8AAAAQCAYAAAChpac8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACmklEQVRIDc2X7VEbMRBAz0wKcEgHpgMIFQAdQEpIOkh+2v8y0AGkggx0gDtg4g5CB2HowHlPnG50QnbOhw+yM/JKq9V+aXd1Hi2XyyrCbDbbZ37NOGD+GOkphn5er/+A9xjn0O5Tnv9ljl0TbPlW2/MR/OAa+kLaaDqdjsE/GG7IYADew/DMeWi/2PsOvgFXYM9KO2HeCsC6Pc8ODejX8UvwSdTF3Iv7ytDe+Q4/j4wzxheIPyNjjtn/DG0MDo67z9wAub50ncExaw0wqL0A+ccM9fYBHdWnBpBlFmiz2V3t+NMRzuAL6ZLx37HWSLMgBSN+D11lfUGZudyusgz+74Jdc2VCn2zivMJKtxjT3f0UXDdZkm680lwn1wV//K6LIYXolY7twqfDppq3NWHsQzPF7sAX4FcD9JmpJbCnVewvOjkP724tZV0Km0pGew4+BVsKTbOpz78pwh4d91LCC7BJ2v/L8A8Jg06X+kPC8iZTs/CGIIQs7HrzpVqP1ses8N2PYPp3rneM8bXwTA5BNvutrl0zLaCvSu1cTlXrsAc0Zzo5zwGfQwWWOm+khcYHX6z322cWrCBwpuRcBd3ymYBf1C8473NpT2qVYSfna5utZ+slh3jz7gvhBlEU1xVz+8G6fvF0coBf9BrAPXBz48yDH5vUvPXiF2AOBxBMwehcq95r5aWg5XK2vka3De4QHD9xow4D8pDffGxa3mZ0JhxAwJVCGKeMUM9gU/wT4ygwPf14tlUCkT/hGXyKTgPuhfn65F+gvkQXwXkmMgkhZcHX0HTgFnzlRg3esn9kDsE2OPER67SzG2W/qcNnKfhF9YqsvmDPMQClz+Ng7yj9V9dXy1DnCNxWGt4q+zap+VUyhqRbeq3y26ayvyiF6iOwSW2DAAAAAElFTkSuQmCC","text/latex":["$\\displaystyle 10 t + 2$"],"text/plain":["10⋅t + 2"]},"execution_count":47,"metadata":{},"output_type":"execute_result"}],"source":["d = sp.Derivative(St, t)\n","d.doit()"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"WtaDnOSiZjrq"},"source":["If we want to calculate the value of the derivative at a specific value of $t$ such as $t = t_1$ or $t = 1$, we can use our `subs()` method:"]},{"cell_type":"code","execution_count":48,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":39},"executionInfo":{"elapsed":1066,"status":"ok","timestamp":1683282393890,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"vt7QJWbTZjrr","outputId":"e906d052-db3b-414e-cc2c-f1c34fef26d2"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAHoAAAAVCAYAAACJ+/prAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEbElEQVRoBe2a7VEbMRCGL54U4JAOTAcQKsB0AC4BOiA/4V+GdACpIAMdQCpgQgemA4g7IO+j0d7IsjjrPmyfZ9iZY6XV16td7erDFG9vb0X4XVxcjML8R3peP9ugj5QNB0VAl5eX58ruBaKP5HZqYORtWaL/xAqFVHAsdiD+3QmiP5KzAG717Ss9i4pdVvIrL38R39V3Jdmzl20dE/aRQJs+vin9Sl7yp1VNRn1X6jkXk+rhtDPxG7A6QyszVPqP+D5CIy//pTwTZKKA+CL5gqEl+6uyH+J34oU4fSI7UnrO2FVltO0DCSNGvhY/MjxKs5BRIHN6MHlbrr7Q1VI9q14tTKqP/g/FZxa6mcB1DJgK+k70nansd1xueZWfKj0Ud0ZGrjSLgfxCv5KN9QGaBbQyEoaxPrA1IXTCvEtSX3g38yKydUboSt9SPWvAupjQPW0KM/REAzkXR9iATtQmFc4eJUfZrNiQ8JJnJhgKV5Bm3Hjs3GFYjNMEdjyZRc1CXTfVwiSM2BTbDgf6w948F1oboAdAyjutX8pDIl96f1jQozQGrVqMTRdQmyk2wYQNJp/1B+9qvN+wWjKQ76gexiUUUh9v2JOMEPgo/lO8VyRMRKkUuVuJylMRLFW/M1lDTNj2CENzyErto7kAd3zFWUUDQh0DPogTQQjn5SGnol2vioQZI7NI7SS+cXwZmKYCOcbQeFgq7HY5ia9BZxg46Q0CDZaJvjOl524AQftNJolAd8LWpwi0DBO2HWFoPLLKG1VcSVWLxLyde7URIXxhf5by8BbKIAyeTWpLRLK2YTs3vsrnTs++wpPk74XnsA+X9mOwZ2e3WeikY0EmJvboIYZuRRqMqwF9pIxjMncoUz3yhL57GoSkMrwc5RPaa5HapAxZ+L54JWrlgWrPFY1zRm+2mxqYnCMPNAE80gxSS8FBZfZfDBiTebQd9pzXCaTlC6Xbjh2P2Wle+Fh4u+KlJyvN4knNt9Ox3+usJib0+4qh8ba2oNknONTFxD6Ll858wdz+7AG3HTses7O88LGdpJ6FMX65Zane2hZrLqZACTjbM6GbkHkQFLyXtAOVCwVhJQ1+o4834GN9bv8VZ/IcrA6Dum5Q8r4cz1jYr4P6G0sKFwuQBcxNIb6VcGtw24E48/wnzoLu4gBZpecsTJHSnLNhaJ42mVCSBN7KXNhVpVvJiAL34uFrGh3yIwaLhsMXnHdWFpIR1xLej92zpHirvdM6XRHnHIFiU0+o5Zw0B84o7sAjzjXSolctWGqXo+csTNHA2O3M/Rat3y+n+vb68FurcByDpwssvq/zLvpa1ocfa7is3jrLhWlkuhx46y88lkerYluzeFcjD2swYfbydY2VC48I6n7UCH+PJizwUOGuQrk9dVVP4xImuSYRajgEEdZfJO9zeBfE8rxx2iesXp/lz6zs0UZcH9gnNnJXFDAWWG+eFk0pmbxXRvaYOUCW7wulR1PoVwEn5957kZ/MB0toQPbjnyN4qi2j839t7o9TZhjxnAAAAABJRU5ErkJggg==","text/latex":["$\\displaystyle \\left( 10 t_{1} + 2, \\ 12\\right)$"],"text/plain":["(10⋅t₁ + 2, 12)"]},"execution_count":48,"metadata":{},"output_type":"execute_result"}],"source":["t1 = sp.Symbol('t1')\n","d.doit().subs({t:t1}), d.doit().subs({t:1})"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"o_Jj2aXRZjrr"},"source":["Similarly, we can also use the `diff()` function to find the derivative of a function directly:"]},{"cell_type":"code","execution_count":49,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":39},"executionInfo":{"elapsed":567,"status":"ok","timestamp":1683282496393,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"KYn2S-ZoZjrr","outputId":"323581c5-78e5-48ae-cb54-31ff3e5e8b1e"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAD8AAAAQCAYAAAChpac8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACmklEQVRIDc2X7VEbMRBAz0wKcEgHpgMIFQAdQEpIOkh+2v8y0AGkggx0gDtg4g5CB2HowHlPnG50QnbOhw+yM/JKq9V+aXd1Hi2XyyrCbDbbZ37NOGD+GOkphn5er/+A9xjn0O5Tnv9ljl0TbPlW2/MR/OAa+kLaaDqdjsE/GG7IYADew/DMeWi/2PsOvgFXYM9KO2HeCsC6Pc8ODejX8UvwSdTF3Iv7ytDe+Q4/j4wzxheIPyNjjtn/DG0MDo67z9wAub50ncExaw0wqL0A+ccM9fYBHdWnBpBlFmiz2V3t+NMRzuAL6ZLx37HWSLMgBSN+D11lfUGZudyusgz+74Jdc2VCn2zivMJKtxjT3f0UXDdZkm680lwn1wV//K6LIYXolY7twqfDppq3NWHsQzPF7sAX4FcD9JmpJbCnVewvOjkP724tZV0Km0pGew4+BVsKTbOpz78pwh4d91LCC7BJ2v/L8A8Jg06X+kPC8iZTs/CGIIQs7HrzpVqP1ses8N2PYPp3rneM8bXwTA5BNvutrl0zLaCvSu1cTlXrsAc0Zzo5zwGfQwWWOm+khcYHX6z322cWrCBwpuRcBd3ymYBf1C8473NpT2qVYSfna5utZ+slh3jz7gvhBlEU1xVz+8G6fvF0coBf9BrAPXBz48yDH5vUvPXiF2AOBxBMwehcq95r5aWg5XK2vka3De4QHD9xow4D8pDffGxa3mZ0JhxAwJVCGKeMUM9gU/wT4ygwPf14tlUCkT/hGXyKTgPuhfn65F+gvkQXwXkmMgkhZcHX0HTgFnzlRg3esn9kDsE2OPER67SzG2W/qcNnKfhF9YqsvmDPMQClz+Ng7yj9V9dXy1DnCNxWGt4q+zap+VUyhqRbeq3y26ayvyiF6iOwSW2DAAAAAElFTkSuQmCC","text/latex":["$\\displaystyle 10 t + 2$"],"text/plain":["10⋅t + 2"]},"execution_count":49,"metadata":{},"output_type":"execute_result"}],"source":["sp.diff(St, t)"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"5lUnfbZUZjrr"},"source":["To calculate higher derivatives, we can provide the third argument to specify the order:"]},{"cell_type":"code","execution_count":50,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":37},"executionInfo":{"elapsed":1152,"status":"ok","timestamp":1683282605391,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"f1zbrPIcZjrr","outputId":"60f2ac80-84ad-4cd2-8876-4eb3d3adc4eb"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAABMAAAAOCAYAAADNGCeJAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABGUlEQVQ4EZWT3Q2CQBCElVgAkQ60A386wA7UDtQ2eDOWoFZgtAPtwEAJdKChA/yG7Bkl93BsMuze3O6wHLf9uq57zrIsmxBfwZS4cvyvhz/Y+oUfgwNcKW5AEOPP4A1mYAS8Rm7Oxh5/U4LV5vgFKCMeFViBHfsXJfmM/S18jG+ElEOs7rU+ah3pEWgr8gpP7hMuRTjuIpZSpKNoW3NekGmQmN7aVvCsh0FiFA6t2PuHba/TZ3qa+aOS0M58Z+WUXNevIDG7Air2nZ3jyiAxa+GBH1n861xnjy5iGjNNSNumEIW6b4sllune9i0k+cTijV86klifuAYbcX0NOqTeKtPFVIJuui7jnT2JNGbFGvQKaNDnQLPaTMYHN8BYMp9me8UAAAAASUVORK5CYII=","text/latex":["$\\displaystyle 10$"],"text/plain":["10"]},"execution_count":50,"metadata":{},"output_type":"execute_result"}],"source":["sp.diff(St, t, 2) # Order equals 2"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"ccHf0helZjrr"},"source":["### Finding the integrals of functions"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"_o8iDN3XZjrs"},"source":["We can determine either the indefinite integral (antiderivative) or the definite integral by generating an `Integral` object:"]},{"cell_type":"code","execution_count":54,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":55},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1683282648112,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"lvf1rWi4Zjrs","outputId":"c36dda31-0ea4-4ddf-99e2-41eaecc07a38"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\int \\sin{\\left(x \\right)}\\, dx$"],"text/plain":["⌠ \n","⎮ sin(x) dx\n","⌡ "]},"execution_count":54,"metadata":{},"output_type":"execute_result"}],"source":["x = sp.Symbol('x')\n","sp.Integral(sp.sin(x), x)"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"dBbHy24nZjrs"},"source":["Just as with the `Limit` and `Derivative` classes, we can evaluate the integral by employing the `doit()` method:"]},{"cell_type":"code","execution_count":52,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":39},"executionInfo":{"elapsed":2,"status":"ok","timestamp":1683282662476,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"Fc8dStmxZjrs","outputId":"00451833-4b13-4efd-8370-1417d07a5125"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAEwAAAAVCAYAAADsFggUAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADaElEQVRYCd2X7VEbMRCGDUMBTqggpoOEVAB0AKYCoIMw/LL/ZaADSAnQAaECEjoIHcS4A/I8QrrRffhIzHkyczuzJ2m1WmlfrVa6wfPz86DPPJlMRsv61zR2fdBjmk6nX3Dv4xtcHEUbhYneAoaj+3i5SXlTePuPFcZ+dwjlcRq6Zrj2jXBwiE93lJ+68A07P7GzQznva4Sd4+BlF2BFG9rS5qCvEfZENLyLznZSYO8JQx96F2E4Zu567ASlshFtjjfKsm5aLNocYgjPM4v3yIsEnOn8ijpblNfIQ6JVRt0bbhfWjjalQ+RtuWkPncJGGJF9GKudlMQ/Uz+CR/AhLJXW+SIKX23udQ4YC3Jyk+QR9QAQpU4LxiP8AAvENbynjDIQ9Vv74AtYx84pBaAg2idFo7myjbgtf2kz2KD02fENFqRTOOWqYmOzKdzY3VUcSYEQmHzSFB3zuAB1btApwIryU0odElAd36aexkaVVjDUUX+WlPMSW0ZWSN5R7no8wlex/Z4y74/iUGhztBEXdEejurBcuVo/YNxDVRht6exF3odc8FK02W8U3uc61rUJW/XYueMu0gTucbiFBblkG1mVdFogmugH4/NN8mg7Z9CnPGgaFGWOGwqYym05ocVGrUsgpN8vReM36SxyykGCKrmuM9gocOeNviv4tWOJap0YV93kMVpf65qNkrAR641dywvT7pnAF1HSGS5SQO6RDsBSGmlb8BpygTqmngBtMmFUttkOY7BhXlWvSB3IhnJQqH+UzzoFjMnmGHUXzT81on8ftl+9UjJXmT6dkMxxgpJuM2X2m2t0sNG+OpAbkqI4CPwwVjC8VNIcgj+nnTZQtTParq2JjLDHTgGLs5gH/GmtOuuRSkdih/oYnWqkqOMNmZ4FOuDO5mQ79efyVHcOnwtVEih5Fm3OcgVk9tXyaqYT8t1KXvpxQem2Se+s0q2IjlHgrZh21PYl8gBGdMAozPPhJm2jZCFg9LkJPmFKaYG2QLumsB7aboy50Tl8BglkcTxpl4g+x52sBLDSTP+hEZ1rvMmXWQ723Ew3amsVR3KZNXU9xkha6iZdsJDwPrSvl4ARCV4O5lEj400UbWgrPG57CVhEyMun7Rfpb4HURhGtvcxhCYkYHT5lXvs7SENKJeP81yxdVn8A2nkm2OycCy0AAAAASUVORK5CYII=","text/latex":["$\\displaystyle - \\cos{\\left(x \\right)}$"],"text/plain":["-cos(x)"]},"execution_count":52,"metadata":{},"output_type":"execute_result"}],"source":["sp.Integral(sp.sin(x), x).doit()"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"9QBTPMbIZjrs"},"source":["Additionally, the `integrate()` function can be utilized to directly compute the integral of a given function:"]},{"cell_type":"code","execution_count":58,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":39},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1683282680381,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"qDfz2mPLZjrs","outputId":"7250c531-95ca-4e7f-826a-9e3beb3e7cba"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left( - \\cos{\\left(x \\right)}, \\ x \\log{\\left(x \\right)} - x\\right)$"],"text/plain":["(-cos(x), x⋅log(x) - x)"]},"execution_count":58,"metadata":{},"output_type":"execute_result"}],"source":["sp.integrate(sp.sin(x), x), sp.integrate(sp.log(x), x)"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"QV6O1PTUZjrs"},"source":["> Again, it's important to note that we should use the elementary math functions `sin()` and `log()` from the `SymPy` library in the above expression, rather than from alternative libraries such as `NumPy`."]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"bm9Twx0QZjrs"},"source":["To calculate the definite integral, we just need to provide the variable (symbol), the lower limit, and the upper limit as a `tuple`:"]},{"cell_type":"code","execution_count":59,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":37},"executionInfo":{"elapsed":386,"status":"ok","timestamp":1683282758859,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"PSuSRSLLZjrt","outputId":"5dcfe0f6-eb56-4a37-957a-c6213bcf55c0"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAYAAAASVl2WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAZElEQVQYGWP8//8/Aww0NDQYAdmrgdgYyP4AEmcBMgSA9GwgfgfEJkCsBMRwAFIAUhkKEgGyy4AUyBQ4YIKzcDBGFUACBj0chKHhJQQLN0ZQZAGDGBRBIOACxKC4OQfE94B4NwDm+hiAOyllRAAAAABJRU5ErkJggg==","text/latex":["$\\displaystyle 1$"],"text/plain":["1"]},"execution_count":59,"metadata":{},"output_type":"execute_result"}],"source":["# sp.Integral(sp.sin(x), (x, 0, sp.pi / 2)).doit()\n","sp.integrate(sp.sin(x), (x, 0, sp.pi / 2)) # (function, (integration_variable, lower_limit, upper_limit))"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"uhSGLdUWZjrt"},"source":["Improper integrals are supported as well:"]},{"cell_type":"code","execution_count":60,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":37},"executionInfo":{"elapsed":546,"status":"ok","timestamp":1683282774692,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"0f-ABCSAZjrt","outputId":"c4fa8350-4c49-4028-c587-b6e6cb7e4854"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAYAAAASVl2WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAZElEQVQYGWP8//8/Aww0NDQYAdmrgdgYyP4AEmcBMgSA9GwgfgfEJkCsBMRwAFIAUhkKEgGyy4AUyBQ4YIKzcDBGFUACBj0chKHhJQQLN0ZQZAGDGBRBIOACxKC4OQfE94B4NwDm+hiAOyllRAAAAABJRU5ErkJggg==","text/latex":["$\\displaystyle 1$"],"text/plain":["1"]},"execution_count":60,"metadata":{},"output_type":"execute_result"}],"source":["sp.integrate(sp.exp(-x), (x, 0, sp.oo))"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"EKo6hqS-Zjru"},"source":["## Linear algebra with `SymPy`"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"GiXlZWQmZjru"},"source":["Matrices can be generated as instances of the `Matrix` class:"]},{"cell_type":"code","execution_count":62,"metadata":{"id":"JNYTukimZjru"},"outputs":[],"source":["a, b, c, x, y, z = sp.symbols('a, b, c, x, y, z')"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"E5YVXBdrZjru"},"source":["When creating a matrix in `SymPy`, the syntax resembles that of `NumPy`: you supply a list of lists, with each list representing a row in the matrix:"]},{"cell_type":"code","execution_count":63,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":78},"executionInfo":{"elapsed":454,"status":"ok","timestamp":1683282858549,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"lyNG07xHZjru","outputId":"b4fbed71-a0da-4245-ee56-fc6bc4aef240"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left[\\begin{matrix}a & b & c\\\\x & y & z\\\\a & b & c\\end{matrix}\\right]$"],"text/plain":["⎡a b c⎤\n","⎢ ⎥\n","⎢x y z⎥\n","⎢ ⎥\n","⎣a b c⎦"]},"execution_count":63,"metadata":{},"output_type":"execute_result"}],"source":["m1 = sp.Matrix([[a, b, c], [x, y, z], [a, b, c]])\n","m1"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"9K1BKyMVZjru"},"source":["A matrix with `a, b, c` as diagonal elements can be constructed utilizing the `diag()` function:"]},{"cell_type":"code","execution_count":64,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":78},"executionInfo":{"elapsed":567,"status":"ok","timestamp":1683282872462,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"p--aTU2TZjru","outputId":"1c52ee4c-1bbc-42a3-ee66-10c57e2cc8c2"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left[\\begin{matrix}a & 0 & 0\\\\0 & b & 0\\\\0 & 0 & c\\end{matrix}\\right]$"],"text/plain":["⎡a 0 0⎤\n","⎢ ⎥\n","⎢0 b 0⎥\n","⎢ ⎥\n","⎣0 0 c⎦"]},"execution_count":64,"metadata":{},"output_type":"execute_result"}],"source":["m2 = sp.diag(a,b,c)\n","m2"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"czktKJNIZjru"},"source":["Matrix multiplication can then be performed using the `*` operator:"]},{"cell_type":"code","execution_count":65,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":78},"executionInfo":{"elapsed":579,"status":"ok","timestamp":1683282885875,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"81xI8e7CZjru","outputId":"95f6730f-cac5-4398-c507-1bf2af2bfad7"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left[\\begin{matrix}a^{2} & b^{2} & c^{2}\\\\a x & b y & c z\\\\a^{2} & b^{2} & c^{2}\\end{matrix}\\right]$"],"text/plain":["⎡ 2 2 2 ⎤\n","⎢a b c ⎥\n","⎢ ⎥\n","⎢a⋅x b⋅y c⋅z⎥\n","⎢ ⎥\n","⎢ 2 2 2 ⎥\n","⎣a b c ⎦"]},"execution_count":65,"metadata":{},"output_type":"execute_result"}],"source":["m1*m2.T # Instead of using @, we use * to multiply matrices"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"UJrhcWJJZjru"},"source":["Scalar multiplication and addition function as anticipated:"]},{"cell_type":"code","execution_count":68,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":78},"executionInfo":{"elapsed":386,"status":"ok","timestamp":1683282899525,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"yIsU9dJQZjrv","outputId":"fc7d4333-aadc-4ed5-db95-63636773d27a"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left[\\begin{matrix}4 a & 3 b & 3 c\\\\3 x & b + 3 y & 3 z\\\\3 a & 3 b & 4 c\\end{matrix}\\right]$"],"text/plain":["⎡4⋅a 3⋅b 3⋅c⎤\n","⎢ ⎥\n","⎢3⋅x b + 3⋅y 3⋅z⎥\n","⎢ ⎥\n","⎣3⋅a 3⋅b 4⋅c⎦"]},"execution_count":68,"metadata":{},"output_type":"execute_result"}],"source":["3*m1 + m2"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["m1 + 2 # This is not allowed since broadcasting is not directly supported"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"87bQZD_qfSh1"},"source":["The inverse of the matrix can be acquired using the `inv()` method:"]},{"cell_type":"code","execution_count":69,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":78},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1683283053663,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"awATRIZMe4-9","outputId":"b0ff5a98-ac1a-4c46-a495-4f72b1433870"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left[\\begin{matrix}\\frac{1}{a} & 0 & 0\\\\0 & \\frac{1}{b} & 0\\\\0 & 0 & \\frac{1}{c}\\end{matrix}\\right]$"],"text/plain":["⎡1 ⎤\n","⎢─ 0 0⎥\n","⎢a ⎥\n","⎢ ⎥\n","⎢ 1 ⎥\n","⎢0 ─ 0⎥\n","⎢ b ⎥\n","⎢ ⎥\n","⎢ 1⎥\n","⎢0 0 ─⎥\n","⎣ c⎦"]},"execution_count":69,"metadata":{},"output_type":"execute_result"}],"source":["m2.inv()"]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"avhrXeUKfYmM"},"source":["The matrix's eigenvalues and eigenvectors can be derived using the `eigenvals()` and `eigenvects()` methods:"]},{"cell_type":"code","execution_count":70,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":78},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1683283049192,"user":{"displayName":"phonchi chung","userId":"13517391734500420886"},"user_tz":-480},"id":"DqUo14w9e6VL","outputId":"acb7df57-a2cd-41d4-abe0-a4524fed0fc3"},"outputs":[{"data":{"image/png":"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","text/latex":["$\\displaystyle \\left( \\left\\{ a : 1, \\ b : 1, \\ c : 1\\right\\}, \\ \\left[ \\left( a, \\ 1, \\ \\left[ \\left[\\begin{matrix}1\\\\0\\\\0\\end{matrix}\\right]\\right]\\right), \\ \\left( b, \\ 1, \\ \\left[ \\left[\\begin{matrix}0\\\\1\\\\0\\end{matrix}\\right]\\right]\\right), \\ \\left( c, \\ 1, \\ \\left[ \\left[\\begin{matrix}0\\\\0\\\\1\\end{matrix}\\right]\\right]\\right)\\right]\\right)$"],"text/plain":["⎛ ⎡⎛ ⎡⎡1⎤⎤⎞ ⎛ ⎡⎡0⎤⎤⎞ ⎛ ⎡⎡0⎤⎤⎞⎤⎞\n","⎜ ⎢⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟⎥⎟\n","⎜{a: 1, b: 1, c: 1}, ⎢⎜a, 1, ⎢⎢0⎥⎥⎟, ⎜b, 1, ⎢⎢1⎥⎥⎟, ⎜c, 1, ⎢⎢0⎥⎥⎟⎥⎟\n","⎜ ⎢⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟ ⎜ ⎢⎢ ⎥⎥⎟⎥⎟\n","⎝ ⎣⎝ ⎣⎣0⎦⎦⎠ ⎝ ⎣⎣0⎦⎦⎠ ⎝ ⎣⎣1⎦⎦⎠⎦⎠"]},"execution_count":70,"metadata":{},"output_type":"execute_result"}],"source":["m2.eigenvals(), m2.eigenvects()"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["If you would like more information about the `Matrix` class and linear algebra with SymPy, refer to the [official documentation](https://docs.sympy.org/latest/modules/matrices/matrices.html)."]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["You can also explore the [Sympy Gamma](https://www.sympygamma.com/) and [SymPy Live](https://live.sympy.org/) websites to learn more about `SymPy`."]},{"attachments":{},"cell_type":"markdown","metadata":{"id":"vvzae_iAfkQk"},"source":["All in all, `SymPy` is a Python library for symbolic mathematics. It aims to provide a computer algebra system that is both easy to use and extensible. Unlike numerical libraries, which focus on approximations and numerical computations, `SymPy` is designed to perform algebraic manipulations and simplifications symbolically, allowing for exact solutions to mathematical problems.\n","\n","`SymPy` offers a wide range of features, including basic arithmetic operations, algebraic manipulation, calculus, equation solving, linear algebra, and more. It is particularly well-suited for tasks that require manipulation of symbolic expressions or solving equations symbolically."]}],"metadata":{"colab":{"provenance":[]},"kernelspec":{"display_name":"base","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.9.13"},"vscode":{"interpreter":{"hash":"1561eddc5e0c9c74df968f74d5080d02882967127f956e6e7049c43d2ef42321"}}},"nbformat":4,"nbformat_minor":0}